Liferay - 以编程方式更改portlet列

时间:2015-08-13 12:07:42

标签: java liferay portlet

我在Liferay布局中创建的不同列中使用不同的portlet执行Liferay门户。

我的问题是:如何以编程方式(在java中)更改portlet所属的列?

我已尝试过这个:

long userId = themeDisplay.getUserId();
long groupId = themeDisplay.getLayout().getGroupId();

Layout layout = LayoutLocalServiceUtil.getFriendlyURLLayout(groupId, true, currentFriendlyURL);
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType();

layoutTypePortlet.removePortletId(userId, iniPortletName);
String portletInstanceId = layoutTypePortlet.addPortletId(userId, iniPortletName, newColumn, position, true);

LayoutLocalServiceUtil.updateLayout(layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(), layout.getTypeSettings());

它有效,但是使用此代码,我删除了portlet,然后,我创建了一个新实例,而我并不想要它。

如何更新portlet的相同实例的位置?

谢谢。

1 个答案:

答案 0 :(得分:1)

好的,我找到了。

如果要保留相同的实例,可以使用 movePortletId(userId,portletId,newColumn,position)方法。

String portletId = (String) request.getAttribute(WebKeys.PORTLET_ID);
layoutTypePortlet.movePortletId(userId, portletId, finColumn, position);

您需要使用portletId而不是portletName,它标识所有具有相同名称的portlet。

https://docs.liferay.com/portal/6.2/javadocs/src-html/com/liferay/portal/model/LayoutTypePortlet.html

谢谢。