(Portal開発読書ノート)Portletモード


Portletは,ユーザが何をしているかをパターンで表す.
JSR−168は3種類の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.   } 

1つのPortletインスタンスは、いつでも1つのモードの下にしか存在しないが、複数のモードをサポートするように構成することができるが、異なるモードは、あるPortletインスタンスの上に同時に作用してはならない(換言すれば、EDITモードであってもよく、VIEWモードに切り替えることができる)
モードの汎用性:
VIEWはデフォルトのモードで、Portletを表示します(サポートする必要があります)
EDITモードでは、PortletユーザーがPortletインスタンスをカスタマイズできます.
HELPモードPortletの使い方情報を表示
 
------
 
ただし、さまざまなPortal Serverでは、config、print、previewなどの仕様以外のモードを使用できます.
 
Portletモードのカスタマイズ方法
宣言方法:
portlet.xmlの要素のでは、この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のすべての要素の外側で、上記の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>