portlet.getInstanceId()始终在portlet挂钩的JSP中返回null

时间:2019-06-13 19:28:34

标签: liferay liferay-6

我使用liferay 6.2。

我想在portlet钩子的文件jsp中获取portlet的实例ID。贝娄是我的代码,但是实例ID总是打印null到控制台:

<% 
List<Portlet> portletList = null;
try{
    portletList =PortletLocalServiceUtil.getPortlets();
}catch(Exception e){}
for(Portlet portlet : portletList){
    String portletName = portlet.getDisplayName();
    if(portletName.equals("Asset Categories Navigation")) {
        System.out.println("Portlet instance Id >>> " + portlet.getInstanceId());
        System.out.println("Portlet Display Name >>> " + portletName); 
        System.out.println("Portlet Id >>> " + portlet.getPortletId());
        System.out.println("Portlet Name >>> " + portlet.getPortletName()); 
        break;
    }
}
%>

输出:

Portlet instance Id >>> null
Portlet Display Name >>> Asset Categories Navigation
Portlet Id >>> 122
Portlet Name >>> 122

1 个答案:

答案 0 :(得分:1)

如果我正确地(从其方法中)理解了API,它将为您提供所有可以实例化并添加到页面的portlet,但不提供实际实例化的portlet。

为了获得实例化的portlet,通常需要遍历页面(API中的布局)并检查在页面中添加了什么。

在具有数千个页面的门户中,每个页面都有多个portlet,盲目枚举实例化portlet的 all 毫无意义,此外,未通过portlet对其进行引用,但是仅通过页面访问(因为这是通常的访问方式)。

未在页面上实例化的portlet自然没有实例ID。您应该能够通过使用任何portlet(例如“资产类别导航”)进行检查,并将其放在多个页面上。我预计您的代码将导致该Portlet发生一次。