(Portal开发读书笔记)Portlet 模式

简介:

Portlet用模式来表示用户在做什么。

 JSR-168 定义了三种Portlet 模式,VIEW/EDIT/HELP模式。

 

 
 
  1. public class PortletMode 
  2.   public static final PortletMode VIEW = new PortletMode("view"); 
  3.  
  4.   public static final PortletMode EDIT = new PortletMode("edit"); 
  5.  
  6.   public static final PortletMode HELP = new PortletMode("help"); 
  7.   private String _name; 
  8.  
  9.   public PortletMode(String name) 
  10.   { 
  11.     if (name == null) { 
  12.       throw new IllegalArgumentException("PortletMode name can not be NULL"); 
  13.     } 
  14.     this._name = name.toLowerCase(Locale.ENGLISH); 
  15.   } 
  16.  
  17.   public String toString() 
  18.   { 
  19.     return this._name; 
  20.   } 
  21.  
  22.   public int hashCode() 
  23.   { 
  24.     return this._name.hashCode(); 
  25.   } 
  26.  
  27.   public boolean equals(Object object) 
  28.   { 
  29.     if (object instanceof PortletMode) { 
  30.       return this._name.equals(((PortletMode)object)._name); 
  31.     } 
  32.     return false
  33.   } 

注意,一个Portlet实例在任何时候都只可以处于一种模式之下,但是它可以被配置为支持多种模式,但是不同的模式不可以同时作用于某个Portlet实例之上(换句话说,可以先是EDIT模式,然后切换到VIEW模式)

模式的通用性:

VIEW是默认的模式,用于显示Portlet (必须支持)

EDIT模式允许Portlet用户定制Portlet实例

HELP模式显示Portlet的用法信息

 

------

 

但是:各种不同的Portal Server可以使用规范以外的模式,比如config,print,preview模式

 

如何自定义Portlet模式?

声明方式:

在portlet.xml中的<supports>元素的<portlet-mode>里面指定该Portlet 所支持的某种模式(自定义模式)

 
 
  1. <portlet> 
  2. <portlet-name>bookCatalog</portlet-name> 
  3. <portlet-class> 
  4. chapter03.code.listing.base.BookCatalogPortlet</portlet-class> 
  5. <supports> 
  6. <mime-type>text/html</mime-type> 
  7. <portlet-mode>print</portlet-mode> 
  8. ... 
  9. </supports> 
  10. ... 
  11. </portlet> 

然后,在Portlet应用级别,也就是在portlet.xml中所有<portlet>元素的外面,声明自定义的模式,比如上文中的print模式,我们必须声明如下:

 

 
 
  1. <portlet-app ...> 
  2.  
  3. <portlet> 
  4. ... 
  5. </portlet> 
  6.  
  7. <custom-portlet-mode> 
  8. <portlet-mode>print</portlet-mode> 
  9. </custom-portlet-mode> 
  10. </portlet-app> 

注意,这个自定义的portlet mode,比如print ,必须被要部署到的portal server所支持。

 

编程方式:

 

 
 
  1. if(PortletRequest.isPortletModeAllowed(new PortletMode("print"))) { 
  2. actionResponse.setPortletMode(new PortletMode("print")); 

 

以上不论是声明方式还是编程方式,都成功的为某个Portlet开启了某种自定义模式,那么这种模式之下这个Portlet的行为如何呢,我们必须用代码来给出它的期望行为:

比如print模式我们希望一个显示一个打印状态下的文档预览,于是:

 

 
 
  1. @RenderMode(name="print"
  2. public void showPrint(RenderRequest request, 
  3. RenderResponse response) throws IOException, PortletException { 
  4. showPrintableCatalog(request, response); 

 

------

谁来管理Portlet 模式?

既可以被portal管理也可以被portlet管理

如果是要定义一个被portal管理的模式,那么portal server必须支持之,并且配置如下:

 
 
  1. <custom-portlet-mode> 
  2. <portlet-mode>search</portlet-mode> 
  3. </custom-portlet-mode> 

 

如果要定义一个portlet管理的portlet模式,那么必须配置如下:

 

 
 
  1. <custom-portlet-mode>  
  2. <portlet-mode>search</portlet-mode> 
  3. <portal-managed>false</portal-managed>  
  4. </custom-portlet-mode> 

 

 





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/844290,如需转载请自行联系原作者

目录
相关文章
|
JavaScript 数据可视化 前端开发
《面向三维GIS的Cesium开发与应用》读书笔记
《面向三维GIS的Cesium开发与应用》读书笔记
|
安全 测试技术 数据安全/隐私保护
软件安全开发生命周期读书笔记
分阶段: 0. 教育和意识       1.微软成功的原因在于管理层支持和教育与培训.       2.工程师必须对基本的安全弱点、常见的安全漏洞类型、基本的安全设计有所了解。
1463 0
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
存储 关系型数据库 编译器
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
121 1
|
存储 算法 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
77 1