WindowState 表示了Portlet 窗口的状态

JSR-168规范定义了三种窗口状态,(标准,最大化,最小化)

  1. public class WindowState 
  2.   public static final WindowState NORMAL = new WindowState("normal"); 
  3.  
  4.   public static final WindowState MAXIMIZED = new WindowState("maximized"); 
  5.  
  6.   public static final WindowState MINIMIZED = new WindowState("minimized"); 
  7.   private String _name; 
  8.  
  9.   public WindowState(String name) 
  10.   { 
  11.     if (name == null) { 
  12.       throw new IllegalArgumentException("WindowState 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 WindowState) { 
  30.       return this._name.equals(((WindowState)object)._name); 
  31.     } 
  32.     return false
  33.   } 

最小化时候,render请求是被忽略的,而最大化时候,Portlet会显示一些额外信息。

 

-----

 

各种不同的Portal Server(比如Liferay)可以有自己的规范以外的特有的窗口状态

如何开发自定义窗口状态:

首先在portlet.xml的<supports>的<window-state>中声明这个Porlet所要支持的窗口状态,可以指定多个

  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. <window-state>pop_up</window-state> 
  8. ... 
  9. </supports> 
  10. ... 
  11. </portlet> 

然后在portlet应用级别,也就是在portlet.xml中所有<portlet>元素的外面,声明自定义窗口状态,注意,这个window-state必须被Portlet应用所部属的Portal Server所支持

  1. <portlet-app> 
  2.  
  3. <portlet> 
  4. .. 
  5. </portlet> 
  6.  
  7. <custom-window-state> 
  8. <window-state>pop_up</window-state> 
  9. </custom-window-state> 
  10. ... 
  11. </portlet-app>