Liferay portlet实例化配置

XML 
在默认的情况下,一个portlet在一个页面上只能有一个,如果需要一个页面上有多个相同的portlet的话就需要对portlet进行实例化。实例化以后,Liferay会为每一个实例化的portlet分配一个 instance id用来区分相同功能的portlet。一个页面里的多个相同的portlet的instance id 不同,同样不同页面的相同的portlet的instance id也不相同。这样就可以开发功能相同,内容不同的实现。
具体配置如下:
添加instanceable属性配置;默认情况下instanceable为false,属性顺序参照liferay-portlet-app_4_4_0.dtd文件。
liferay-portlet.xml
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 4.4.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_4_4_0.dtd">  
  3.   
  4. <liferay-portlet-app>  
  5.     <portlet>  
  6.         <portlet-name>LinkManager</portlet-name>  
  7.         <icon>/img/icon.png</icon>  
  8.         <struts-path>library</struts-path>  
  9.         <restore-current-view>false</restore-current-view>  
  10.         <instanceable>true</instanceable>  
  11.         <css-class-wrapper>portlet-library</css-class-wrapper>  
  12.     </portlet>  
  13.     <role-mapper>  
  14.         <role-name>user</role-name>  
  15.         <role-link>User</role-link>  
  16.     </role-mapper>  
  17. </liferay-portlet-app>  

每一个属性都是在com.liferay.portal.model.impl.PortletImpl中对应。
配置完成以后在代码中通过:
Java代码  收藏代码
  1. ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);  
  2.         PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();  
  3.         Portlet portlet = PortletLocalServiceUtil.getPortletById(themeDisplay.getCompanyId(), portletDisplay.getId());  
  4.         String instanceId = portlet.getInstanceId();  

获得instance id。默认情况下,没有实例化的portlet取出来的instance id 为null。