一、Portlet是什么?
Portlet是基于java的web组件,由portlet容器管理,并由容器处理请求,生产动态内容。Portals使用portlets作为可插拔用户接口组件,提供信息系统的表示层。作为利用servlets进行web应用编程的下一步,portlets实现了web应用的模块化和用户中心化。 portlet规范,即jsr(Java Standardization Request )168/268,是为了实现portal和portlet的互操作。它定义了portlet和portlet容器之间的和约,让portlet实现个性化、表示和安全的api集。规范还定义了怎样在portlets应用中打包portlets。(引自百度百科:http://baike.baidu.com/view/58961.htm)
Liferay是portlet规范的实现,对于portlet规范实现的主流产品还有IBM、Oracle等的Portal产品,主流产品的详细可以参看:http://www.huqiwen.com/2012/06/11/what-is-liferay/ 此篇文章中关于Liferay市场地位处的图片。很以很多时候我们将Liferay称为一个Portal容器,也就是一个提供Portlet运行的环境。
二、创建一个Portlet
1、基于上一节的Study这个portlet工程的基础。点击Liferay IDE上的liferay工具栏,有三个按钮,点击中间按钮,New Liferay Portlet。如下图,点击下一步。
Portlet plugin project:这里选择要创建的portlet属于哪个插件工程。
Source folder:类的放置位置,一般默认。
Portlet Class:要创建的Portlet的控制类的名称,可以将此类看作Struts中的Action类。
Java package:包名。
Superclass:选择要继承哪个类。一般默认,也就是MVCPortlet。下面这几个类的关系如下:MVCPortlet是LiferayPortlet的子类,LiferayPortlet是GenericPortlet的子类。在MVCPortlet中封装了一些方便开发的方法,所以一般使用MVCPortlet,如果有特殊需求可以使用他们的父类。
2、在此步骤看到的是Portlet的相关信息,如模式,JSP位置等,此步骤是portlet.xml文件的可视化编辑,此步骤的所有选项都可以通过编辑portlet.xml完成。点击下一步。
Porltet Info:这里显示的是Porltet的名称,显示名称,标题等。一般默认,不需要修改。
Portlet Modes:这里是portlet的模式,View、Edit、Help这三种模式,是portlet规范里面定义的。
Liferay Portlet Modes:看名知义,Liferay Portlet模式。一般默认即可。Portlet默认的三种模式,Liferay认为不能满足实际的需求,所以又新增了这几种模式。如果选择多个模式,就可以在portlet的设置里面看到,可以通过设置进行切换,方便进行一些特殊需求,如:config可以用来开发可配置Porltet,管理员可以为指定的Portlet定制相关的参数等。
JSP folder:JSP的存放位置,一般默认的命名是html/porltet名称,一般默认即可。html是相对于docroot的,完整路径是docroot/html/demo/view.jsp。
Create resource bundle file:绑定资源文件,主要是国际化。如果想要porltet的名称是中文的,测必须使用资源文件,liferay推荐工程中的所有文字描述类的内容都使用资源文件来定义,这样方便国际化,也能避免出现一些可能的乱码问题。这里先不选,后面详讲国际化。
3、此步骤是Liferay-portlet.xml和liferay-display.xml的可视化编辑。点击完成即可。
Icon:此portlet的图标。
Allow mutiple instaces:是否允许在同一个页面中有多个porltet的实例,默认为否。
CSS:当前porltet的自定义CSS。一般默认。
JavaScript:当前portlet自定义JS。一般默认。
CSS classname:当前portlet的命名空间,防止CSS和其他porltet冲突。
Category:当前的portlet,显示在哪个分类下面,这里是Liferay-display.xml文件的可视化编辑。
三、MVCPortlet的简单使用
可以看到在工程的com.huqiwen.study包下面生成了一个Demo的java文件,如果只是让portlet显示/html/demo/view.jsp里面的内容,则不需要在Demo.java文件里面添加内容。如果需要让view.jsp后从台初始化一些信息,则需要重写doView文法。view模式显示时调用doView方法,edite模式显示时调用doEdite方法,config模式显示时调用doConfig方法,依此类推。
在此大部分情况下可以将renderRequest当然HttpServletRequest使用。如果要转换可以通过PortalUtil.getHttpServletResponse(portletResponse)来进行转换。
可以使用renderRequest.setAttribute(arg0, arg1)方法,在前台页面通过JSTL等进行取值。
这里不详述,和普通的WEB程序基本一样。
四、其他
在二里面创建的内容都可以通过修改portlet.xml,liferay-portlet.xml,liferay-display.xml等来进行修改调整。创建向导包含的只是一些最通用的内容,一些高级的参数还需要通过修改porltet.xml和liferay-portlet.xml来完成。
通过向导默认 porltet的 view展现的 JSP命名为 view.jsp。此名称可以在 docroot下面修改成相应的内容,实际开发中建议命名中和业务相关的,方便后期查找识别,如用户的可以命名成 userView等,修改名称的同时需要修改 Porltet.xml里面 init-param对应的名称,否则会出现找不到页面的情况。