我使用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
答案 0 :(得分:1)
如果我正确地(从其方法中)理解了API,它将为您提供所有可以实例化并添加到页面的portlet,但不提供实际实例化的portlet。
为了获得实例化的portlet,通常需要遍历页面(API中的布局)并检查在页面中添加了什么。
在具有数千个页面的门户中,每个页面都有多个portlet,盲目枚举实例化portlet的 all 毫无意义,此外,未通过portlet对其进行引用,但是仅通过页面访问(因为这是通常的访问方式)。
未在页面上实例化的portlet自然没有实例ID。您应该能够通过使用任何portlet(例如“资产类别导航”)进行检查,并将其放在多个页面上。我预计您的代码将导致该Portlet发生一次。