Liferay - 以编程方式更改 portlet 列

Liferay - change portlet column programmatically

我正在做一个 Liferay 门户,在 Liferay 布局中创建的不同列中有不同的 portlet。

我的问题是:如何以编程方式(在 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 实例的位置?

谢谢。

好的,我找到了。

如果要保持同一个实例,可以使用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

谢谢。