如何在Liferay中的特定页面上添加portlet?

时间:2012-08-06 11:30:37

标签: liferay liferay-6 portlet

如何在特定的Liferay页面上找到添加的portlet?

例如:
我有三个页面:欢迎 Wiki 搜索

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

现在我想以请求参数的形式将一些信息传递给iframe-portlet Search page上的Welcome page

1 个答案:

答案 0 :(得分:20)

我找到了两种方法:

  1. 如果要在添加portlet的同一页面上找到portlet,可以使用portlet或JSP可用的themeDisplay对象:

    // 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();
    
  3. portletIdList包含portletIds及其instanceIds。现在,从列表中,您只需使用iframe-portlet过滤掉/search页面上的com.liferay.portal.util.PortletKeys.IFRAME即可,您将获得类似48_INSTANCE_rPv9的内容。