我在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的相同实例的位置?
谢谢。
答案 0 :(得分:1)
好的,我找到了。
如果要保留相同的实例,可以使用 movePortletId(userId,portletId,newColumn,position)方法。
String portletId = (String) request.getAttribute(WebKeys.PORTLET_ID);
layoutTypePortlet.movePortletId(userId, portletId, finColumn, position);
您需要使用portletId而不是portletName,它标识所有具有相同名称的portlet。
谢谢。