Portlet 协作
可以使用事件机制或公共呈现参数机制以在门户网站中协调 Portlet。
JSR 286 定义了以下两种机制,如下所示:
- 事件:操作阶段期间对 Portlet 进行松耦合。
- 公共呈现参数:在 Portlet 之间共享视图状态。
WebSphere® Application Server Portlet 容器支持这两种概念,但在一种异常情况下不支持。不支持对门户网站级别上的事件进行连线。
要使用通过聚集标记库定义的门户网站页面上的公共呈现参数,必须显式声明门户网站作用域:
<%@ taglib uri="http://ibm.com/portlet/aggregation" prefix="portlet" %>
<%@ page isELIgnored ="false"%>
<!-- define portal scope for public render parameters -->
<portlet:scope>
<portlet:portlet context="/simpleportlet" portletname="SimplePortlet1" windowId="id1"/
<portlet:portlet context="/simpleportlet2" portletname="SimplePortlet2" windowId="id2"/>
</portlet:scope>
<portlet:init portletURLPrefix="/my-webapp-context/my-portal-jsp-url-pattern/">
<!-- insert your portlets here, wrapped with your html markup -->
...
<portlet:insert url="simpleportlet/SimplePortlet1" windowId="id1" titleVar="portlettitle_1"/>
...
<portlet:insert url="simpleportlet2/SimplePortlet2" windowId="id2" titleVar="portlettitle_1"/>
...
</portlet:init>
仅可在此定义的作用域中提及的 portlet 窗口中看到公共呈现参数。此情况假定,根据 JSR 286 规范,相应 portlet 还已在其 portlet.xml 文件中声明对给定公共呈现参数的支持,作为一个先决条件。
...
<portlet >
<portlet-name>portlet_name1</portlet-name>
...
<supported-public-render-parameter>foo</supported-public-render-parameter>
</portlet>
<portlet >
<portlet-name>portlet_name2</portlet-name>
...
<supported-public-render-parameter>foo</supported-public-render-parameter>
</portlet>
<public-render-parameter>
<identifier>foo</identifier>
<qname xmlns:x="http://example.com/params">x:foo2</qname>
</public-render-parameter>
...