我怎样才能找到在特定 Liferay 页面上添加了哪些 portlet?
例如:
我有三个页面:Welcome、Wiki和Search。
现在所有这些页面都添加了 portlet,其中一些是可实例化的 portlet(如 web 内容显示和 iframe portlet)。
现在我想将一些信息以请求参数的形式传递iframe-portlet
给Search page
来自Welcome page
.
我找到了两种方法来做到这一点:
如果您想在添加您的 portlet 的同一页面上找到 portlet,您可以使用themeDisplay
portlet 或 JSP 可用的对象:
// In JSP
List<String> portletIdList = themeDisplay.getLayoutTypePortlet().getPortletIds();
// In portlet class
ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
List<String> portletIdList = themeDisplay.getLayoutTypePortlet().getPortletIds();
如果您想在某个不同的页面上找到 portlet,那么您应该知道三件事:friendly-url
,groupId
以及此页面是否属于站点(public-page
或private-page
社区),因此代码如下:
// 101543 is the SiteId, if it is a public-page then "false" and "/search" is the friendlyURL
LayoutTypePortlet layoutTypePortlet = LayoutTypePortletFactoryUtil.create(LayoutLocalServiceUtil.getFriendlyURLLayout(101543, false, "/search"));
List<String> portletIdList = layoutTypePortlet.getPortletIds();
包含portletIdsportletIdList
及其 instanceIds。所以现在从列表中你可以通过使用过滤掉页面iframe-portlet
上的内容,你会得到类似./search
com.liferay.portal.util.PortletKeys.IFRAME
48_INSTANCE_rPv9