15

我怎样才能找到在特定 Liferay 页面上添加了哪些 portlet?

例如:
我有三个页面:WelcomeWikiSearch

现在所有这些页面都添加了 portlet,其中一些是可实例化的 portlet(如 web 内容显示和 iframe portlet)。

现在我想将一些信息以请求参数的形式传递iframe-portletSearch page来自Welcome page.

4

1 回答 1

22

我找到了两种方法来做到这一点:

  1. 如果您想在添加您的 portlet 的同一页面上找到 portlet,您可以使用themeDisplayportlet 或 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();
    
  2. 如果您想在某个不同的页面上找到 portlet,那么您应该知道三件事:friendly-urlgroupId以及此页面是否属于站点(public-pageprivate-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上的内容,你会得到类似./searchcom.liferay.portal.util.PortletKeys.IFRAME48_INSTANCE_rPv9

于 2012-08-06T11:30:36.947 回答