? Liferay
在用戶第一次登陸后,都會(huì)為其產(chǎn)生一個(gè)默認(rèn)的私有首頁
Layout。?在
Liferay早期版本,可以在系統(tǒng)管理員管理界面中,配置默認(rèn)的group layout。但是在4.1版本中已經(jīng)沒有這個(gè)功能,所以默認(rèn)情況下,新注冊(cè)的用戶,在登陸后,首先看到的其私有place都是一樣的內(nèi)容,而這些內(nèi)容都是liferay提供的。
?
public
?
class
?LayoutCopy?
{
????
????
private
?
static
?Log?_log?
=
?LogFactory.getLog(LayoutCopy.
class
);
????
????
private
?User?user;
????
private
?String?ownerId;
???
private
?Group?userGroup;
???
public
?LayoutCopy(User?user)?
{
???????
super
();
???????
this
.user?
=
?user;
????????
this
.ownerId?
=
?getOwnerId(user.getGroup().getGroupId(),?
false
);
???????
this
.userGroup?
=
?user.getGroup();
???}
???
public
?
void
?copyDefaultUserLayout(HttpServletRequest?httpReq)
???????????
throws
?SystemException,?PortalException?
{
??????
//
?set?in?the?portal-ext.properties:
???????
//
?default.user.layout.group=Default?User
???????
//
?and?create?then?group/community?"Default?User"?
???????
//
?CWPPropsUtil.DEFUALT_USER_LAYOUT_GROUP?=?"default.user.layout.group"
???????Group?group?
=
?GroupLocalServiceUtil.getGroup(user.getCompanyId(),
???????????????PropsUtil.get(
"
default.user.layout.group
"
));
???????
try
?
{
???????????String?groupOwnerId?
=
?getOwnerId(group.getGroupId(),?
true
);
???????????List?privateLayouts?
=
?LayoutLocalServiceUtil
???????????????????.getLayouts(groupOwnerId);
???????????
for
?(Iterator?itr?
=
?privateLayouts.iterator();?itr.hasNext();)?
{
???????????????Layout?layout?
=
?(Layout)?itr.next();
???????????????Layout?newLayout?
=
?copyLayout(layout);
???????????????copyPreferences(httpReq,?newLayout,?layout);
???????????}
???????}
?
catch
?(PortalException?e)?
{
???????????_log.error(
"
Cannot?copy?private?layouts
"
,?e);
???????}
?
catch
?(Exception?e)?
{
???????????_log.error(
"
Cannot?copy?public?layouts
"
,?e);
???????}
???????
try
?
{
???????????String?groupOwnerId?
=
?getOwnerId(group.getGroupId(),?
false
);
???????????List?publicLayouts?
=
?LayoutLocalServiceUtil
???????????????????.getLayouts(groupOwnerId);
???????????
for
?(Iterator?itr?
=
?publicLayouts.iterator();?itr.hasNext();)?
{
???????????????Layout?layout?
=
?(Layout)?itr.next();
???????????????Layout?newLayout?
=
?copyLayout(layout);
???????????????copyPreferences(httpReq,?newLayout,?layout);
???????????}
???????}
?
catch
?(PortalException?e)?
{
???????????_log.error(
"
Cannot?copy?public?layouts
"
,?e);
???????}
?
catch
?(Exception?e)?
{
???????????_log.error(
"
Cannot?copy?public?layouts
"
,?e);
???????}
???}
???
public
?
void
?resetLayout(HttpServletRequest?httpReq)?
throws
?SystemException,?PortalException?
{
???????String?ownerId?
=
?getOwnerId(user.getGroup().getGroupId(),?
false
);
???????LayoutLocalServiceUtil.deleteLayouts(ownerId);
???????PortletPreferencesLocalServiceUtil.deletePortletPreferences(ownerId);
???????ownerId?
=
?getOwnerId(user.getGroup().getGroupId(),?
true
);
???????LayoutLocalServiceUtil.deleteLayouts(ownerId);
???????PortletPreferencesLocalServiceUtil.deletePortletPreferences(ownerId);
???????copyDefaultUserLayout(httpReq);
???}
???
public
?Layout?copyLayout(Layout?groupDefaultLayout)?
throws
?SystemException,
???????????PortalException?
{
???????Layout?layout?
=
?LayoutLocalServiceUtil.addLayout(
???????????????userGroup.getGroupId(),?user.getUserId(),?groupDefaultLayout
??????????????????????.isPrivateLayout(),?groupDefaultLayout
???????????????????????.getParentLayoutId(),?groupDefaultLayout.getName(user
???????????????????????.getLocale()),?groupDefaultLayout.getType(),
???????????????groupDefaultLayout.isHidden(),?
null
);
???????LayoutLocalServiceUtil.updateLayout(layout.getLayoutId(),?layout
????????.getOwnerId(),?groupDefaultLayout.getTypeSettings());
???????layout?
=
?LayoutLocalServiceUtil.updateLookAndFeel(layout.getLayoutId(),
???????????????layout.getOwnerId(),?groupDefaultLayout.getThemeId(),
?
???
對(duì)我們自定的
Company來說,這肯定是不合適的,我們需要自己定義用戶登錄后,默認(rèn)顯示的內(nèi)容和布局。
?
???
后來在Liferay forum中,找到了一篇帖子,給了解決此種問題的解決辦法:在portlet-ext.properties中配置一個(gè) default.user.layout.group 屬性(自定義的),用于指明默認(rèn)的layout-group。在
ServicePreAction
類的擴(kuò)展修改 addDefaultLayouts 操作,滿足特定的需求應(yīng)用。這種擴(kuò)展的方式就是,將指定layout-group拷貝給用戶第一默認(rèn)的,這樣就不會(huì)再使用liferay默認(rèn)的了。—— 當(dāng)然這樣的方式是比較簡(jiǎn)單的,可能在系統(tǒng)實(shí)施過程中,有比這更加復(fù)雜的需求。
?
新建默認(rèn)的
Community
首先,通過新增一個(gè)新的
Community,命名為User_Default,并新增一個(gè)private的page與內(nèi)容.
?
配置默認(rèn)的
Community
首先在
ext項(xiàng)目的 ext-ejb目錄下,修改portal-ext.properties文件,增加如下設(shè)置:
?
default.user.layout.group
=User_Default
|
然后通過
build,將portal-ext.properties移動(dòng)到 ext項(xiàng)目的
??? ext\servers\tomcat\webapps\ROOT\WEB-INF\classes
目錄下。
?
構(gòu)造
LayoutCopy類






















































































更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
