在默认的情况下,一个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
每一个属性都是在com.liferay.portal.model.impl.PortletImpl中对应。
配置完成以后在代码中通过:
获得instance id。默认情况下,没有实例化的portlet取出来的instance id 为null。
具体配置如下:
添加instanceable属性配置;默认情况下instanceable为false,属性顺序参照liferay-portlet-app_4_4_0.dtd文件。
liferay-portlet.xml
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>
<?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();
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。