第四节 编写自己的Portlet类
Liferay Portal内部集成了78个Portlet,包括直接用PrintWriter输出的、调用JSP输出的、调用Servlet输出的,数据来源有直接从数据库取得的、通过Web Service取得的等等。这里,我们只讲述直接用PrintWriter输出的和调用JSP输出的,目的在于讲述如何编写自己的Portlet类。其他的与此类似,不赘述。
3.4.1 开发环境
IDE:Eclipse V3.0.1
JDK:V1.4.2_06
ANT:V1.6.2
Tomcat:V5.0(集成在Liferay Portal中)
Liferay Portal:liferay-portal-pro-3.6.0-tomcat
3.4.2 准备工作
①、安装JDK V1.4.2_06,在系统环境变量中增加变量JAVA_HOME,指向JDK安装目录。
②、安装ANT,在系统环境变量中增加变量ANT_HOME,指向ANT安装目录。
③、下载并启动Eclipse V3.0.1.
④、下载并解压缩liferay-portal-pro-3.6.0-tomcat.zip到某一文件夹,该文件夹即为{PORTAL_HOME}。
⑤、在Eclipse中新建一个Java项目,命名为TestPortal,路径为D:\TestPortal,将{PORTAL_HOME}\common\ext\portlet.jar以外部jar的形式添加到库中。下文中,D:\TestPortal将以{APP_HOME}代称。在{APP_HOME}下创建文件夹webapp、deploy、bak。项目缺省输出文件夹为{APP_HOME}\webapp\WEB-INF\classes 。
⑥、在{APP_HOME}\webapp\WEB-INF目录下创建web.xml,内容如下:
TestPortal
⑦、在{APP_HOME}\webapp\WEB-INF下创建tld文件夹,将{PORTAL_HOME}\liferay\WEB-INF\tld/liferay-portlet.tld拷贝到创建的tld文件夹下,备用。
⑧、新建一个Java包com.educhina.portal 。
3.4.3 HelloWorldPortlet
HelloWorldPortlet类计划用单纯的PrintWriter输出Portlet标记片断。在包com.educhina.portal下新建Java类HelloWorldPortlet,这个类必须扩展自javax.Portlet.GenericPortlet类。设计让HelloWorldPortlet支持浏览和编辑两种模式,所以HelloWorldPortlet重写doView和doEdit方法。简单的代码如下:
package com.educhina.portal;
import java.io.IOException;
import javax.Portlet.GenericPortlet;
import javax.Portlet.PortletException;
import javax.Portlet.RenderRequest;
import javax.Portle.RenderResponse;
public class HelloWorldPortlet extends GenericPortlet{
public void doView(RenderRequest req, RenderResponse res)
throws IOException, PortletException {
res.setContentType("text/html");
res.getWriter().println("HelloWorld!");
}
public void doEdit(RenderRequest req,RenderResponse res)
throws IOException,PortletException {
res.setContentType("text/html");
res.getWriter().println("HelloWorld!");
}
}
doView和doEidt方法从RenderRequest取得PrintWriter对象,直接输出一个String字符“HelloWorld!”。这个String字符将作为HelloWorldPortlet的片断内容。
3.4.4 HelloJSPPortlet
HelloJSPPortlet类计划调用外部JSP输出。同样的,HelloJSPPortlet也要扩展自GenericPortlet类。HelloJSPPortlet调用getPortletConfig().getInitParameter("..")方法,取得在Portlet。xml中配置的view-jsp和edit-jsp参数值,以此确定JSP页面的具体位置。然后调用PortletRequestDispatcher的include方法,将JSP页面加载到RenderResponse。代码如下:
package com.educhina.portal;
import java.io.IOException;
import javax.Portlet.GenericPortlet;
import javax.Portlet.PortletException;
import javax.Portlet.PortletRequestDispatcher;
import javax.Portlet.RenderRequest;
import javax.Portlet.RenderResponse;
public class HelloJSPPortlet extends GenericPortlet{
public void doView(RenderRequest req, RenderResponse res)
throws IOException, PortletException {
res.setContentType("text/html");
String jspName = getPortletConfig().getInitParameter("view-jsp");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(req,res);
}
public void doEdit(RenderRequest req,RenderResponse res)
throws IOException,PortletException {
res.setContentType("text/html");
String jspName = getPortletConfig().getInitParameter("edit-jsp");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(req,res);
}
}
在{APP_HOME}/webapp目录下创建view.jsp和edit.jsp,view.jsp代码如下,edit.jsp类似:
This is a Sample JSP Portlet used in viewing model。 Use this as a quick way to include JSPs。
|
JSP文件不能包含关于HTML的、、的信息,只能包含原来位于内部的HTML内容。那些、、信息由Portal页面来提供。
只有在JSP页面中使用<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>和,JSP页面才可以直接操作Portlet的一些变量,比如:renderResponse、renderRequest、portletConfig。
第五节 修改Web部署描述文件
正如2.6.1所指出的那样,要保证Portlet能够在Liferay Portal成功部署,必须对web.xml进行必要的修改,添加Portlet监听器、Servlet映射、Portlet标签库。在先前web.xml的节点下增加如下内容:
com.liferay.portal.servlet.PortletContextListener
HelloWorldPortlet
com.liferay.portal.servlet.PortletServlet
Portlet-class
com.educhina.portal.HelloWorldPortlet
0
HelloWorldPortlet
/HelloWorldPortlet/*
HelloJSPPortlet
com.liferay.portal.servlet.PortletServlet
Portlet-class
com.educhina.portal.HelloJSPPortlet
0
HelloJSPPortlet
/HelloJSPPortlet/*
http://java.sun.com/Portlet
/WEB-INF/tld/liferay-Portlet.tld
其中,节点是增加一个监听器,以便Liferay Portal监听所有针对Portlet的操作。以及是将上述两个Portlet类加入Servlet容器中。Portlet类实质上也是Servlet。是将Liferay Portal标签库加入列表中,以便JSP调用。
第六节 创建Liferay Portal部署描述文件
修改完web.xml之后,还要创建2.6所说的三个Portlet部署描述文件:portlet.xml、liferay-portlet.xml、liferay-display.xml。
①、portlet.xml
portlet.xml定义Portlet的初始化信息。这里,我们在portlet.xml中增加两个Portlet节点,分别代表HelloWorldPortlet和HelloJSPPortlet。其中,HelloWorldPortlet支持PringWriter输出,HelloJSPPortlet支持JSP输出;两者都支持浏览和编辑两种模式。HelloJSPPortlet需要定义两个init参数,告诉系统JSP文件的位置。
HelloWorldPortlet
HelloWorldPortlet
com.educhina.portal.HelloWorldPortlet
0
text/html
text/html
edit
HelloWorldPortlet
HelloWorldPortlet
HelloWorldPortlet
guest
power-user
user
HelloJSPPortlet
HelloJSPPortlet
com.educhina.portal.HelloJSPPortlet
view-jsp
/view.jsp
edit-jsp
/edit.jsp
0
text/html
text/html
edit
HelloJSPPortlet
HelloJSPPortlet
HelloJSPPortlet
guest
power-user
user
②、liferay-Portlet.xml
Liferay-Portlet.xml主要定义Portlet的模板、实例总数、是否允许重复定义等。同样的,我们增加了两个节点,代表HelloWorldPortlet和HelloJSPPortlet。
3.5.0//EN" "http://www.liferay.com/dtd/liferay-Portlet-app_3_5_0.dtd">
HelloWorldPortlet
HelloWorldPortlet
true
true
HelloJSPPortlet
HelloJSPPortlet
true
true
administrator
Administrator
guest
Guest
power-user
Power User
user
User
③、liferay-display.xml
liferay-display.xml定义Portlet所属类别。Liferay Portal默认定义了一个category.test类别,这里,我们将HelloWorldPortlet和HelloJSPPortlet归属到category.test。
3.5.0//EN" "http://www.liferay.com/dtd/liferay-display_3_5_0.dtd">
。test">
至此,一个简单的Portlet就开发完成了。接下来,我们把它部署到Liferay Portal上。
posted on 2005-10-21 09:22
eamoi 阅读(5692)
评论(3) 编辑 收藏 所属分类:
Java