首先介绍一下开发环境:
jdk1.5;
eclipse 3.3;
liferay 5.2.3(tomcat版);
oracle 10g(liferay的数据表需要导入,具体的配置在我的另一篇blog(
关 于liferay启动界面(在浏览器里录入http://localhost:8080后打开的界面)的定制
)中有).
1.首先进入eclipse创建一个web project.起名为:vendorportal;
2.创建一个TodoAction java类,package为:com.sinoprof.vendorportal.todo.action,该类继承PortletAction类(该类在portal-impl.jar中);
3.在该类中覆盖方法:processAction和render 方法;其中render是最终portal会向客户端返回的界面,而processAction是接收客户端上<actionurl />请求的方法.
这两个类的运行顺序是:首先所有对portlet的请求首先会进入processAction方法,处理完毕后,会调用render方法向客户端发送portlet处理完毕后的界面.
4.在该类的rendor方法中,我简单的写入了 return mapping.findForward("portlet.vendorportal.todo.view");
5.这样就可以完成我们的action类的开发了,该该类编译后的class文件放至liferay主目录的web-info/classes目录下(package不要忘了).当然这只是个简单的例子,没有太多业务逻辑的功能,比较简单.
6.开发一个jsp(view.jsp)来显示处理后的内容,该文件需要放至在(liferay主目录的/html/vendorportlet/todo目录下),内容如下:
7.下面就是如何在liferay中配置该portlet了,下面的几步就比较关键了:
首先我们需要为我们的portlet在liferay中起一个唯一的id(注意id不只可以是数字,也可以为字符),这里我使用了todolist的id名称.
(1)在liferay-portlet.xml(该文件在WEB-INFO目录下)中增加如下内容:
<portlet>
<portlet-name>todolist</portlet-name> /**portlet的id*/
<icon>/html/icons/calendar.png</icon> /**在portlet的界面中显示的引导图片*/
<struts-path>todolist</struts-path> /**该值我还不清楚是什么意义*/
<open-search-class>com.liferay.portlet.calendar.util.CalendarOpenSearchImpl</open-search-class>
<control-panel-entry-category>content</control-panel-entry-category>
<control-panel-entry-weight>5.0</control-panel-entry-weight>
<preferences-unique-per-layout>false</preferences-unique-per-layout>
<use-default-template>false</use-default-template>
<show-portlet-access-denied>true</show-portlet-access-denied>
<show-portlet-inactive>true</show-portlet-inactive>
<restore-current-view>false</restore-current-view>
<scopeable>true</scopeable>
<private-request-attributes>false</private-request-attributes>
<private-session-attributes>false</private-session-attributes>
<render-weight>50</render-weight>
<header-portlet-css>/html/portlet/calendar/css.jsp</header-portlet-css> /**这是portlet中jsp文件使用的私有css文件*/
<css-class-wrapper>portlet-calendar</css-class-wrapper>
</portlet>
(2)在liferay-display.xml中增加portlet所属的组别,这一步的操作主要是以管理员的身份进入后,可以在add application操作中显示portlet:
<category name="category.news">
<portlet id="39" />
<portlet id="83" />
<portlet id="84" />
<portlet id="todolist" />
<portlet id="option" />
<portlet id="publicnotice" />
</category>
(3)在portlet-custom.xml中增加如下内容:
<portlet>
<portlet-name>todolist</portlet-name> /**portlet的id*/
<display-name>todo</display-name>
<portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class>
<init-param>
<name>view-action</name>
<value>/vendorportal/todo/view</value> /**在structs-config.xml中配置的path*/
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
(4) 在struts-config.xml的节点<action-mappings>中增加如下内容:
<action path="/vendorportal/todo/view" /**该值与liferay-custom.xml的value-action值对应*/
type="com.sinoprof.vendorportal.todo.action.TodoAction">
<forward name="portlet.vendorportal.todo.view" /**该值与todoAction类中的mapping.findforward中的参数值对应*/
path="portlet.vendorportal.todo.view" />
</action>
(5) 在tiles-defs.xml(struts的界面布局管理配置文件)文件中配置如下内容:
<definition name="portlet.vendorportal.todo" extends="portlet" />
<definition name="portlet.vendorportal.todo.view " extends="portlet.vendorportal.todo">
<put name="portlet_content" value="/vendorportlet/todo/view.jsp " (view.jsp放置在html/vendorportlet/todo/目录下) />
</definition>
经过以上步聚就可完成一个portlet在liferay中的配置了,现在我们就可以启动liferay中tomcat的startup.bat来启动.默认界面中我们开发的liferay不会在界面中显示,这里有两个方法:
(1)直接修改数据表layout;
(2)以管理员身份登录后,使用add application功能将portlet加至界面.