`
daoger
  • 浏览: 523888 次
  • 性别: Icon_minigender_1
  • 来自: 山东济南
社区版块
存档分类
最新评论

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 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中对应。
配置完成以后在代码中通过:
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。
3
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics