<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-86  評(píng)論-767  文章-3  trackbacks-3

    第四節(jié) ?編寫自己的Portlet

    Liferay Portal內(nèi)部集成了78個(gè)Portlet,包括直接用PrintWriter輸出的、調(diào)用JSP輸出的、調(diào)用Servlet輸出的,數(shù)據(jù)來(lái)源有直接從數(shù)據(jù)庫(kù)取得的、通過(guò)Web Service取得的等等。這里,我們只講述直接用PrintWriter輸出的和調(diào)用JSP輸出的,目的在于講述如何編寫自己的Portlet類。其他的與此類似,不贅述。

    3.4.1? 開(kāi)發(fā)環(huán)境

    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? 準(zhǔn)備工作

    、安裝JDK V1.4.2_06,在系統(tǒng)環(huán)境變量中增加變量JAVA_HOME,指向JDK安裝目錄。

    、安裝ANT,在系統(tǒng)環(huán)境變量中增加變量ANT_HOME,指向ANT安裝目錄。

    、下載并啟動(dòng)Eclipse V3.0.1.

    、下載并解壓縮liferay-portal-pro-3.6.0-tomcat.zip到某一文件夾,該文件夾即為{PORTAL_HOME}

    、在Eclipse中新建一個(gè)Java項(xiàng)目,命名為TestPortal,路徑為D:\TestPortal,將{PORTAL_HOME}\common\ext\portlet.jar以外部jar的形式添加到庫(kù)中。下文中,D:\TestPortal將以{APP_HOME}代稱。在{APP_HOME}下創(chuàng)建文件夾webappdeploybak。項(xiàng)目缺省輸出文件夾為{APP_HOME}\webapp\WEB-INF\classes

    、在{APP_HOME}\webapp\WEB-INF目錄下創(chuàng)建web.xml,內(nèi)容如下:

    ?????? TestPortal

    、在{APP_HOME}\webapp\WEB-INF下創(chuàng)建tld文件夾,將{PORTAL_HOME}\liferay\WEB-INF\tld/liferay-portlet.tld拷貝到創(chuàng)建的tld文件夾下,備用。

    、新建一個(gè)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類計(jì)劃用單純的PrintWriter輸出Portlet標(biāo)記片斷。在包com.educhina.portal下新建JavaHelloWorldPortlet,這個(gè)類必須擴(kuò)展自javax.Portlet.GenericPortlet類。設(shè)計(jì)讓HelloWorldPortlet支持瀏覽和編輯兩種模式,所以HelloWorldPortlet重寫doViewdoEdit方法。簡(jiǎn)單的代碼如下:

    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對(duì)象,直接輸出一個(gè)String字符“HelloWorld!”。這個(gè)String字符將作為HelloWorldPortlet的片斷內(nèi)容。

    3.4.4? HelloJSPPortlet

    HelloJSPPortlet類計(jì)劃調(diào)用外部JSP輸出。同樣的,HelloJSPPortlet也要擴(kuò)展自GenericPortlet類。HelloJSPPortlet調(diào)用getPortletConfig().getInitParameter("..")方法,取得在Portletxml中配置的view-jspedit-jsp參數(shù)值,以此確定JSP頁(yè)面的具體位置。然后調(diào)用PortletRequestDispatcherinclude方法,將JSP頁(yè)面加載到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目錄下創(chuàng)建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文件不能包含關(guān)于HTML的信息,只能包含原來(lái)位于內(nèi)部的HTML內(nèi)容。那些信息由Portal頁(yè)面來(lái)提供。

    只有在JSP頁(yè)面中使用<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>JSP頁(yè)面才可以直接操作Portlet的一些變量,比如:renderResponserenderRequestportletConfig

    第五節(jié)? 修改Web部署描述文件

    正如2.6.1所指出的那樣,要保證Portlet能夠在Liferay Portal成功部署,必須對(duì)web.xml進(jìn)行必要的修改,添加Portlet監(jiān)聽(tīng)器、Servlet映射、Portlet標(biāo)簽庫(kù)。在先前web.xml節(jié)點(diǎn)下增加如下內(nèi)容:

    ??????

    ?????? 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

    ??????

    其中,節(jié)點(diǎn)是增加一個(gè)監(jiān)聽(tīng)器,以便Liferay Portal監(jiān)聽(tīng)所有針對(duì)Portlet的操作。以及是將上述兩個(gè)Portlet類加入Servlet容器中。Portlet類實(shí)質(zhì)上也是Servlet是將Liferay Portal標(biāo)簽庫(kù)加入列表中,以便JSP調(diào)用。

    第六節(jié)? 創(chuàng)建Liferay Portal部署描述文件

    修改完web.xml之后,還要?jiǎng)?chuàng)建2.6所說(shuō)的三個(gè)Portlet部署描述文件:portlet.xmlliferay-portlet.xmlliferay-display.xml

    portlet.xml

    portlet.xml定義Portlet的初始化信息。這里,我們?cè)?/SPAN>portlet.xml中增加兩個(gè)Portlet節(jié)點(diǎn),分別代表HelloWorldPortletHelloJSPPortlet。其中,HelloWorldPortlet支持PringWriter輸出,HelloJSPPortlet支持JSP輸出;兩者都支持瀏覽和編輯兩種模式。HelloJSPPortlet需要定義兩個(gè)init參數(shù),告訴系統(tǒng)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的模板、實(shí)例總數(shù)、是否允許重復(fù)定義等。同樣的,我們?cè)黾恿藘蓚€(gè)節(jié)點(diǎn),代表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默認(rèn)定義了一個(gè)category.test類別,這里,我們將HelloWorldPortletHelloJSPPortlet歸屬到category.test

    3.5.0//EN" "http://www.liferay.com/dtd/liferay-display_3_5_0.dtd">

    ?????? test">

    ?????????????

    ?????????????

    ??????

    至此,一個(gè)簡(jiǎn)單的Portlet就開(kāi)發(fā)完成了。接下來(lái),我們把它部署到Liferay Portal上。

    posted on 2005-10-21 09:22 eamoi 閱讀(5712) 評(píng)論(3)  編輯  收藏 所屬分類: Java

    評(píng)論:
    # re: 【原創(chuàng)】Liferay Portal二次開(kāi)發(fā)指南(10) 2006-01-13 14:33 | tomi
    好文章應(yīng)該使勁胡頂  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】Liferay Portal二次開(kāi)發(fā)指南(10) [未登錄](méi) 2007-01-24 23:41 | wanglei
    老大好像liferay-portal-pro-3.6.0-tomcat.zip沒(méi)有下載的 請(qǐng)問(wèn)那有啊 如果您有能不能傳一個(gè)啊 非常感謝  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】Liferay Portal二次開(kāi)發(fā)指南(10) [未登錄](méi) 2011-03-24 10:05 | 123
    不全啊  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 国产免费私拍一区二区三区| 国产成人A在线观看视频免费| 猫咪www免费人成网站| 国产青草亚洲香蕉精品久久| 在线免费播放一级毛片| 无码区日韩特区永久免费系列 | 亚洲午夜成激人情在线影院| 亚洲成av人片在线看片| 黄页网站在线视频免费| 亚洲国产人成中文幕一级二级| 亚洲老妈激情一区二区三区| 亚洲理论片在线中文字幕| 一级一黄在线观看视频免费| 1000部拍拍拍18勿入免费视频软件| 亚洲黄片手机免费观看| 特a级免费高清黄色片| 暖暖日本免费在线视频 | 一级毛片免费在线观看网站| 亚洲午夜成人精品电影在线观看| 亚洲六月丁香婷婷综合| 久久久WWW成人免费精品| 日韩成人免费在线| 免费看一级一级人妻片| 卡一卡二卡三在线入口免费| 亚洲91av视频| 国产精品成人啪精品视频免费| 四虎影视免费永久在线观看| 一级毛片a免费播放王色电影| 亚洲av无码国产精品夜色午夜| 免费国产污网站在线观看不要卡| 亚洲高清国产拍精品26U| 精品人妻系列无码人妻免费视频 | 毛片免费全部播放一级| 亚洲成综合人影院在院播放| 日韩午夜免费视频| 久久精品成人免费观看97| 亚洲综合在线成人一区| 国产99视频免费精品是看6| 国产激情免费视频在线观看| 亚洲综合伊人久久综合| 一级午夜免费视频|