隨筆-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 閱讀(5714) 評論(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
          不全啊  回復  更多評論
            
          主站蜘蛛池模板: 体育| 洛隆县| 寿光市| 湖北省| 清涧县| 临西县| 辽宁省| 汝城县| 徐汇区| 永泰县| 邢台市| 安平县| 云阳县| 重庆市| 通许县| 苍南县| 香河县| 罗江县| 乐亭县| 会泽县| 沾化县| 澄江县| 潞城市| 始兴县| 务川| 莒南县| 兴仁县| 宝应县| 横峰县| 梧州市| 托里县| 南汇区| 化州市| 饶平县| 岐山县| 织金县| 宕昌县| 德钦县| 金乡县| 德清县| 清涧县|