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。
谢谢。
我正在做一个 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。
谢谢。