转载:liferay portlet开发模式

原文章:https://blog.51cto.com/supercharles888/844290

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

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


public class PortletMode 

public static final PortletMode VIEW = new PortletMode("view"); 


public static final PortletMode EDIT = new PortletMode("edit"); 


public static final PortletMode HELP = new PortletMode("help"); 

private String _name; 


public PortletMode(String name) 

  { 

if (name == null) { 

throw new IllegalArgumentException("PortletMode name can not be NULL"); 

    } 

this._name = name.toLowerCase(Locale.ENGLISH); 

  } 


public String toString() 

  { 

return this._name; 

  } 


public int hashCode() 

  { 

return this._name.hashCode(); 

  } 


public boolean equals(Object object) 

  { 

if (object instanceof PortletMode) { 

return this._name.equals(((PortletMode)object)._name); 

    } 

return false; 

  } 

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

模式的通用性:

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

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

HELP模式显示Portlet的用法信息


------


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


如何自定义Portlet模式?

声明方式:

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

<portlet> 

<portlet-name>bookCatalog</portlet-name> 

<portlet-class> 

chapter03.code.listing.base.BookCatalogPortlet</portlet-class> 

<supports> 

<mime-type>text/html</mime-type> 

<portlet-mode>print</portlet-mode> 

... 

</supports> 

... 

</portlet> 

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


<portlet-app ...> 


<portlet> 

... 

</portlet> 


<custom-portlet-mode> 

<portlet-mode>print</portlet-mode> 

</custom-portlet-mode> 

</portlet-app> 

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


编程方式:


if(PortletRequest.isPortletModeAllowed(new PortletMode("print"))) { 

actionResponse.setPortletMode(new PortletMode("print")); 


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

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


@RenderMode(name="print") 

public void showPrint(RenderRequest request, 

RenderResponse response)throws IOException, PortletException { 

showPrintableCatalog(request, response); 


------

谁来管理Portlet 模式?

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

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

<custom-portlet-mode> 

<portlet-mode>search</portlet-mode> 

</custom-portlet-mode> 


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


<custom-portlet-mode>  

<portlet-mode>search</portlet-mode> 

<portal-managed>false</portal-managed>  

</custom-portlet-mode> 

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容