Portlet之间交互,如果数据只是一些字符串的话,可以使用Public Render参数。

渲染参数有两种:public和private

private渲染参数用于同一个Portlet的表单或者URL链接等动作激起Portlet容器调用该Portlet的渲染方法。它的生命周期由Portlet容器控制,当render完毕后销毁。

public渲染参数用于同一个(或者不同)的Portlet应用之间的Portlet的渲染请求,它是private渲染参数的概念的外延。所以只要常规定义一个private渲染参数,并且声明它是public 就可以了。它的生命周期和private渲染参数不同,容器无法控制其生命周期,仅仅当显式调用ActionResponse或者EventResponse的removePublicRenderParameter方法时才能将其销毁。

 

发送者Portlet的部署描述文件中:

  1. <portlet-app...> 
  2. <portlet> 
  3. <portlet-name>bookCatalog</portlet-name> 
  4. <portlet-class> 
  5. chapter11.code.listing.base.BookCatalogPortlet 
  6. </portlet-class> 
  7. ... 
  8.  
  9. <supported-public-render-parameter> 
  10. recentBookIsbn 
  11. </supported-public-render-parameter> 
  12. </portlet> 
  13. <public-render-parameter> 
  14. <identifier>recentBookIsbn</identifier> 
  15. <qname xmlns:n="http://www.mynamespace.com/"> 
  16. n:myBookISBN 
  17. </qname> 
  18. </public-render-parameter> 
  19. ... 
  20. </portlet-app> 

<supported-public-render-parameter>元素用于定义这个Portlet所支持的public渲染参数,而<public-render-parameter>元素则吧<supported-public-render-parameter>中的参数关联到一个拥有全局名字空间的qname上,从而它可以被portal的其他Portlet访问到。

 

同样,在接收者Portlet的部署描述文件中也平行的应该有类似定义:

  1. <portlet-app...> 
  2. <portlet> 
  3. <portlet-name>recentBook</portlet-name> 
  4. <portlet-class> 
  5. chapter11.code.listing.base.RecentlyAddedBookPortlet 
  6. </portlet-class> 
  7. ... 
  8. <supported-public-render-parameter>  recentBookIsbn 
  9. </supported-public-render-parameter> 
  10. </portlet> 
  11.  
  12. <public-render-parameter> 
  13. <identifier>  recentBookIsbn 
  14. </identifier> 
  15. <qname xmlns:n="http://www.mynamespace.com/"> 
  16. n:myBookISBN 
  17. </qname> 
  18. </public-render-parameter> 
  19. ... 
  20. </portlet-app> 

我们可以看到,这两个参数的qname是一致的,所以他们是代表了同一个渲染参数。一个值改变了,则另外一个也改变。

 

 

-----

 

代码中如何使用public render 参数:

虽然在Portlet 2.0中没有定义任何设置公共渲染参数的API,但是却提供了从PortletRequest中获取公共渲染参数的API。

  1. public abstract interface PortletRequest 
  2.  
  3.  public abstract Map<String, String[]> getPublicParameterMap(); 
  4.  public abstract String getParameter(String paramString); 
  5.  public abstract String[] getParameterValues(String paramString);