Liferay 6.1开发学习(三):Portlet简述

2012年09月03日 Liferay 评论 10 条 阅读 27,116 views 次

在上一篇文章里面介绍的那个Portlet是在创建工程时默认创建的Portlet页面,可以对Portlet有一个大概的认识,但是很难全面。本篇文章对于Liferay中基于MVC的Portlet创建做一个相对详细的描述。

一、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。如下图,点击下一步。

liferay-portlet-demo

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完成。点击下一步。

创建portlet的信息页

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的可视化编辑。点击完成即可。

liferay-portlet信息

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对应的名称,否则会出现找不到页面的情况。

用户头像

10 条留言  访客:5 条  博主:2 条   引用: 3 条

  1. 非常感谢!期待后续文章…

  2. 这个view.jsp怎么看 在浏览器里面

  3. 如果我用了renderRequest.setAttribute()了,那么应该是进行转发,在前台才可以通过getAttribute得到这个值,怎么进行转发呢,使用include这个方法么?还有哈,在页面的时候form表单有个action属性,那么这个属性里面的值要怎么写呢?mvc的话,c是servlet吧?如果是,那是不是要在web.xml中配置servlet?

  4. portlet 自定义css使用后会被aui.css覆盖,如easyui的datagrid的css会被aui.css中的样式覆盖,导致datagrid的样式乱了,样式放在view.jsp或main.css中以@import url()导入都会被覆盖,这个问题怎么解决,让自定义样式优先使用

来自外部的引用: 3 条

  • Liferay 6.1开发学习(十):在Liferay中使用Ajax | IT人生录
  • Liferay 6.1开发学习(十五):可配置portlet开发 | IT人生录
  • Liferay6.1简单增删改查示例 | IT人生录

给我留言

您必须 登录 才能发表留言!

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号-1

用户登录

分享到: