随笔-86  评论-767  文章-3  trackbacks-3

第四节  编写自己的Portlet

Liferay Portal内部集成了78Portlet,包括直接用PrintWriter输出的、调用JSP输出的、调用Servlet输出的,数据来源有直接从数据库取得的、通过Web Service取得的等等。这里,我们只讲述直接用PrintWriter输出的和调用JSP输出的,目的在于讲述如何编写自己的Portlet类。其他的与此类似,不赘述。

3.4.1  开发环境

IDEEclipse V3.0.1

JDKV1.4.2_06

ANTV1.6.2

TomcatV5.0(集成在Liferay Portal中)

Liferay Portalliferay-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}下创建文件夹webappdeploybak。项目缺省输出文件夹为{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文件夹下,备用。

、新建一个Javacom.educhina.portal

图3.4.2-1.jpg图3.4.2-2.jpg图3.4.2-3.jpg图3.4.2-4.jpg

3.4.3  HelloWorldPortlet

HelloWorldPortlet类计划用单纯的PrintWriter输出Portlet标记片断。在包com.educhina.portal下新建JavaHelloWorldPortlet,这个类必须扩展自javax.Portlet.GenericPortlet类。设计让HelloWorldPortlet支持浏览和编辑两种模式,所以HelloWorldPortlet重写doViewdoEdit方法。简单的代码如下:

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!");

       }

}

doViewdoEidt方法从RenderRequest取得PrintWriter对象,直接输出一个String字符“HelloWorld!”。这个String字符将作为HelloWorldPortlet的片断内容。

3.4.4  HelloJSPPortlet

HelloJSPPortlet类计划调用外部JSP输出。同样的,HelloJSPPortlet也要扩展自GenericPortlet类。HelloJSPPortlet调用getPortletConfig().getInitParameter("..")方法,取得在Portletxml中配置的view-jspedit-jsp参数值,以此确定JSP页面的具体位置。然后调用PortletRequestDispatcherinclude方法,将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.jspedit.jspview.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的一些变量,比如:renderResponserenderRequestportletConfig

第五节  修改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.xmlliferay-portlet.xmlliferay-display.xml

portlet.xml

portlet.xml定义Portlet的初始化信息。这里,我们在portlet.xml中增加两个Portlet节点,分别代表HelloWorldPortletHelloJSPPortlet。其中,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的模板、实例总数、是否允许重复定义等。同样的,我们增加了两个节点,代表HelloWorldPortletHelloJSPPortlet

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类别,这里,我们将HelloWorldPortletHelloJSPPortlet归属到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 阅读(5672) 评论(3)  编辑  收藏 所属分类: Java

评论:
# re: 【原创】Liferay Portal二次开发指南(10) 2006-01-13 14:33 | tomi
好文章应该使劲胡顶  回复  更多评论
  
# re: 【原创】Liferay Portal二次开发指南(10) [未登录] 2007-01-24 23:41 | wanglei
老大好像liferay-portal-pro-3.6.0-tomcat.zip没有下载的 请问那有啊 如果您有能不能传一个啊 非常感谢  回复  更多评论
  
# re: 【原创】Liferay Portal二次开发指南(10) [未登录] 2011-03-24 10:05 | 123
不全啊  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: