liferay 如何在页面实现添加多个portlet

在默认的情况下,一个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 version="1.0" encoding="UTF-8"?>  
<!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">  
  
<liferay-portlet-app>  
    <portlet>  
        <portlet-name>LinkManager</portlet-name>  
        <icon>/img/icon.png</icon>  
        <struts-path>library</struts-path>  
        <restore-current-view>false</restore-current-view>  
        <instanceable>true</instanceable>  
        <css-class-wrapper>portlet-library</css-class-wrapper>  
    </portlet>  
    <role-mapper>  
        <role-name>user</role-name>  
        <role-link>User</role-link>  
    </role-mapper>  
</liferay-portlet-app>  
每一个属性都是在com.liferay.portal.model.impl.PortletImpl中对应。 

配置完成以后在代码中通过: 

Java代码   收藏代码
ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);  
        PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();  
        Portlet portlet = PortletLocalServiceUtil.getPortletById(themeDisplay.getCompanyId(), portletDisplay.getId());  
        String instanceId = portlet.getInstanceId();  

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

你可能感兴趣的:(liferay 如何在页面实现添加多个portlet)