Liferay6架構(gòu)及開發(fā)培訓(xùn) -- 正在學(xué)習(xí)課件_第1頁
Liferay6架構(gòu)及開發(fā)培訓(xùn) -- 正在學(xué)習(xí)課件_第2頁
Liferay6架構(gòu)及開發(fā)培訓(xùn) -- 正在學(xué)習(xí)課件_第3頁
Liferay6架構(gòu)及開發(fā)培訓(xùn) -- 正在學(xué)習(xí)課件_第4頁
Liferay6架構(gòu)及開發(fā)培訓(xùn) -- 正在學(xué)習(xí)課件_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、ContentsLiferay介紹JSP Portlet開發(fā)Struts Portlet開發(fā)Configuration Portlet開發(fā)SSH Portlet開發(fā)開發(fā)實(shí)踐Liferay介紹介紹Liferay概述及特點(diǎn)什么是Portal?Portlet vs Servlet 開發(fā)Portlet 的生命周期Liferay Portal 工作原理規(guī)范和標(biāo)準(zhǔn)推薦開發(fā)使用工具簡單開發(fā)說明返回上級目錄返回上級目錄返回目錄返回目錄Liferay概述及特點(diǎn)概述及特點(diǎn)v Liferay 是專門為符合Portlet API(JSR268)的門戶單元設(shè)計(jì)開發(fā)的。而且有許多不錯(cuò)的門戶單元附加在Lliferay 中,

2、包括郵件、文檔庫、日歷、公告板等,它們也可以作為開發(fā)學(xué)習(xí)時(shí)的例子使用。v Liferay Portal代表了完整的J2EE應(yīng)用,使用了Web、EJB以及JMS等技術(shù),特別是其前臺(tái)界面部分使用Struts 框架技術(shù),基于XML的portlet配置文件可以自由地動(dòng)態(tài)擴(kuò)展,使用了Web Services來支持一些遠(yuǎn)程信息的獲取,使用 Apahce Lucene實(shí)現(xiàn)全文檢索功能。 主要特點(diǎn):1、提供單一登陸接口,多認(rèn)證模式(LDAP或SQL);2、管理員能通過用戶界面輕松管理用戶,組,角色;3、用戶能可以根據(jù)需要定制個(gè)性化的portal layout;4、能夠在主流的J2EE應(yīng)用服務(wù)器上運(yùn)行,如JBo

3、ss+Jetty/Tomcat,JOnAS;5、支持主流的數(shù)據(jù)庫,如PostgreSQL,MySQL;6、使用了第三放的開源項(xiàng)目,如Spring, Hibernate, Lucene, Struts;7、支持包括中文在內(nèi)的多種語言;8、采用最先進(jìn)的技術(shù) Java, EJB, JMS, SOAP, XML;什么是什么是Portal?許斌Portal 是基于Web 的,以“應(yīng)用整合”和“消除信息孤島”為最終目的,提供單點(diǎn)登錄、內(nèi)容聚合、個(gè)性化門戶定制等功能的綜合信息系統(tǒng)。完整的Portal 通常由Portal 服務(wù)器、Portlet 容器、Portlet 構(gòu)成。1Portal 服務(wù)器是容納Port

4、let 容器,支持Portlet 呈現(xiàn)的普通或者特殊Web 服務(wù)器。 Portal 服務(wù)器通常會(huì)提供個(gè)性化設(shè)置、單點(diǎn)登錄、內(nèi)容聚合、信息發(fā)布、權(quán)限管理等功能,支持各種信息數(shù)據(jù)來源,并將這些數(shù)據(jù)信息放在網(wǎng)頁中組合而成,提供個(gè)性化的內(nèi)容定制,不同權(quán)限的瀏覽者能夠?yàn)g覽不同的信息內(nèi)容。2Portlet 容器提供Portlet 執(zhí)行的環(huán)境,包含很多Portlet 并管理它們的生命周期,保存Portlet 的定制信息。Portlet 容器是普通Web Servlet 容器的擴(kuò)展,接收到來自Portal 的請求后,接著將這個(gè)請求傳遞給存在Portal 容器的Portlet 執(zhí)行。3Portlet 是Port

5、al 中最重要的組件,負(fù)責(zé)在Portal 中呈現(xiàn)信息內(nèi)容,有相應(yīng)的生命周期。通過自定義Portlet,用戶很容易定義個(gè)性化的Portal 頁面。Portlet是以Java技術(shù)為技術(shù)的Web組件, 由Portlet 容器負(fù)責(zé)管理、處理請求并返回動(dòng)態(tài)頁面,可以作為Portal 的可即插即用的界面組件。返回目錄Portlet vs Servlet 開發(fā)開發(fā)開發(fā)一個(gè)Java Portlet 類似于開發(fā)一個(gè)基于web應(yīng)用的Servlet開發(fā)相似的地方:vPortlet 也是 Java 技術(shù)的 web 組件vPortlet 也是有特定的 container 在管理vPortlet 可以動(dòng)態(tài)產(chǎn)生各種內(nèi)容vP

6、ortlet 的生命周期由 container 所管理vPortlet 和客戶端的互動(dòng)是通過 request/response 的機(jī)制主要的區(qū)別在于:vPortlet只能生成標(biāo)記段,不是整個(gè)文檔, Portal將會(huì)連接一些portlets的標(biāo)記段并且創(chuàng)建一個(gè)整個(gè)頁面返回給用戶.v接受請求的類必須繼承javax.portlet.Portlet 而不是javax.servlet.http.HttpServlet.v一個(gè)portlet請求可能涉及兩個(gè)狀態(tài)進(jìn)程:1. 對于大多數(shù)的請求來說,一個(gè)portlet將會(huì)執(zhí)行一個(gè)狀態(tài)轉(zhuǎn)換操作,這與action 狀態(tài)有關(guān)系,并且通過一個(gè)方法processActio

7、n來實(shí)現(xiàn).并不是需要每一個(gè)Action 狀態(tài).包含一個(gè)action 狀態(tài)的請求被注入到ActionURL,與此同時(shí)那些只含有render phase 的請求被注入到RenderURL.2. 接下來所有與頁面有關(guān)聯(lián)的,將要被返回的其他的portlets的render狀態(tài)可能會(huì)在任何將HTML標(biāo)記段來描述他們自身的請求中來被調(diào)用.Portlet通過一個(gè)render方法實(shí)現(xiàn)這種功能.返回目錄返回目錄Portlet vs Servlet 開發(fā)開發(fā)Portlet 有一些附加的功能是 Servlet 所沒有的:vPortlet 能夠存取及儲(chǔ)存永久配置文件及定制資料。vPortlet 可以存取使用者數(shù)據(jù)vP

8、ortlet 具有 URL 的重寫功能在文件中去動(dòng)態(tài)建立連結(jié),允許 portal server 不用去知道如何在網(wǎng)頁的片 段之中建立連結(jié)及動(dòng)作。vPortlet 可以儲(chǔ)存臨時(shí)性的數(shù)據(jù)在 Portlet session 之中,擁有兩個(gè)不同的范圍 :application-wide scope 及 Portlet private scope 。 Portlet 不具有一些功能, 但是 Servlet 卻有提供:vServlet 具有設(shè)置輸出的文字編碼( character set encoding)方式vServlet 可以設(shè)置 HTTP 輸出的 headervServlet 才能夠接收客戶對于

9、portal 發(fā)出的 URL 請求返回目錄返回目錄Portlet 的生命周期的生命周期 一個(gè)Portlet有著良好的生命周期管理,定義了怎樣裝載,實(shí)例化和初始化,怎樣響應(yīng)來自客戶端的請求及怎樣送出服務(wù)。這個(gè)Portlet生命周期由Portlet接口的init,processAction,render和destroy方法來表達(dá)。載入和實(shí)例化載入和實(shí)例化:Portlet 容器負(fù)責(zé)載入和實(shí)例化Portlet。當(dāng)Portlet 容器運(yùn)行Portlet 應(yīng)用或者延遲到Portlet 需要服務(wù)使用者的請求時(shí),Portlet 就會(huì)被載入并實(shí)例化。載入Portlet 類后,Portlet 類隨即被實(shí)例化。初始

10、化初始化:Portlet 類實(shí)例化后,Portlet 容器還需要初始化Portlet。以調(diào)用Portlet 去響應(yīng)客戶端的請求。Portlet 容器呼叫Portlet 接口中的init 方法初始化Portlet。擴(kuò)展自PortletConfig的類可以取出定義在部署描述文件中的初始化參數(shù),以及Resource Bundle。初始化異常初始化異常:在 Portlet 初始化期間,Portlet 可能會(huì)丟出 UnavailableException 或PortletException 異常。此時(shí),Portlet 容器不能把 Portlet 置入已啟動(dòng)的服務(wù),并且 Portlet容器必需釋放這個(gè) P

11、ortlet。 destory 方法不能被呼叫,因?yàn)槌跏蓟徽J(rèn)為執(zhí)行失敗。發(fā)生 失敗后,Portlet 容器會(huì)嘗試著重新實(shí)例化及初始化 Portlet。這個(gè)異常處理的規(guī)則是:由一個(gè)UnavailableException 指定一個(gè)不能執(zhí)行的最小時(shí)間,當(dāng)此異常發(fā)生時(shí),Portlet 容器必需等到指定時(shí)間過去后才產(chǎn)生并且初始化一個(gè)新的 Portlet。在初始化過程中所丟出的 Runtime Exception 異常,被當(dāng)作 PortletException 來處理。返回目錄返回目錄Liferay Portal 工作原理(工作原理(1)Company L Portal 系統(tǒng)根據(jù)需要由一個(gè)或者多個(gè)Po

12、rtal 頁面組成,每個(gè)Portal 頁面包含零個(gè)或者多個(gè)的Portlet。每個(gè)Portlet 呈現(xiàn)自己的信息內(nèi)容,以此實(shí)現(xiàn)內(nèi)容聚合。通過定義每個(gè)Portlet 的可用權(quán)限,實(shí)現(xiàn)個(gè)性化的桌面信息定制。 每個(gè)Portlet 對外表現(xiàn)為一個(gè)小窗口,有自己的默認(rèn)樣式和窗口狀態(tài)。 JSR168 規(guī)范定義了三個(gè)Portlet 模式: 瀏覽、編輯和幫助。如右圖,Portlet 有自己的標(biāo)題,瀏覽狀態(tài)下支持編輯、關(guān)閉、上移、下移、最大化、最小化功能,編輯狀態(tài)下支持返回和關(guān)閉功能。從各種數(shù)據(jù)來源提取的信息以Portlet 內(nèi)容的形式呈現(xiàn)在Portal 中。 同時(shí)Portal 是可以根據(jù)使用者的角色,來決定是要

13、提供(顯示)哪幾個(gè)Portlet 模式給使用者操作。返回目錄返回目錄Liferay Portal 工作原理(工作原理(2)Company LPortal 頁面創(chuàng)建過程如下: Portlet 在 Portlet 容器內(nèi)執(zhí)行Portlet容器將這些內(nèi)容提交給 Portlet 服務(wù)器,Portlet 服務(wù)器依照這些內(nèi)容建立Portal頁面,然后將它傳給客戶端呈現(xiàn)。具體流程如右上圖:Portal 頁面的請求過程如下: 使用者經(jīng)由客戶端設(shè)備(例如瀏覽器)存取 Portal,Portal 根據(jù)接收到的請求決定哪些 Portlet 需要被執(zhí)行以滿足需求。Portal 通過Portlet容器呼叫 Portle

14、t,然后由Portlet產(chǎn)生的片段建立Portal頁面,再傳回客戶端呈現(xiàn)給使用者。具體流程如右下圖:Portlet 開發(fā)完畢后,部署到Portal 服務(wù)器,由Portal 服務(wù)器負(fù)責(zé)組織、權(quán)限控制現(xiàn)。返回目錄返回目錄Java Portlet 規(guī)范規(guī)范(JSR-268)和和WSRPJSR-268:由于Liferay 支持Portlet 規(guī)范(JSR-268).任何基于此規(guī)范的Portlet均可正常運(yùn)行.Java 平臺(tái)提供了一種基于JSR-168的標(biāo)準(zhǔn),標(biāo)準(zhǔn)化portlets如何與其他portlet 容器集成并在不同的portal 產(chǎn)品之間來保證兼容性. Liferay Portal 提供了一種1

15、00%便利的portlet 容器來保證任何基于標(biāo)準(zhǔn)規(guī)范的portlet將會(huì)在Liferay中運(yùn)行在JSR-268規(guī)范中,一個(gè)portlet應(yīng)用可以聚集其他的不同的portlets并且打包成一個(gè)WAR文件,就像一個(gè)標(biāo)準(zhǔn)的Java web應(yīng)用一樣.在WAR文件中,以portlet.xml 來定義portlets 的應(yīng)用, portlet.xml 文件放在WAR 文件中的WEB-INF目錄中. Java Portlet 規(guī)范包括portlet 容器.WSRP: WSRP 是OASIS Web Service for Remote Portlet 的縮寫。WSRP 是Web Service 的一種新的

16、商業(yè)應(yīng)用,一種新的標(biāo)準(zhǔn),主要用來簡化Portal 對于各種資源或者程序整合的復(fù)雜度,可以避免編程帶來的整合麻煩和問題。而且Portal 管理員可以從海量的WSRP 服務(wù)中選擇需要的功能用以整合到目前所用的Portal 中。它有三種角色:生產(chǎn)者 提供Portlet消費(fèi)者 使用Portlet終端用戶 最終用戶 它的特點(diǎn)在于生產(chǎn)者將消費(fèi)者所需要的信息通過WSRP 返回給消費(fèi)者,這些信息是相對標(biāo)記片斷,例如HTML、XHTML 等,可以直接嵌入用戶的頁面中,而不用像Web Service一樣開發(fā)用戶端接口。實(shí)現(xiàn)這個(gè)規(guī)范,Portal 可以跟各式各樣的數(shù)據(jù)源打交道,徹底終結(jié)信息孤島的窘境。返回目錄Lif

17、eray Portlet5.2.2開發(fā)推薦使用工具開發(fā)推薦使用工具JDK 1.5,或者 1.5 -java開發(fā)工具包Jre1.5,或者1.6 -java程序運(yùn)行環(huán)境Jikes 1.22-Jikes是一個(gè)IBM創(chuàng)建的Java編譯器,比Sun JDK的編譯器要快.Ant 1.7-一個(gè)基于 Java 的生成工具。Subversion -一個(gè)簡單的版本控制工具,推薦你將所有的代碼和配置文件放在一個(gè)版本控制工具中,Subversion是一個(gè)免費(fèi)的開源的版本控制工具。Eclipse3.3+MyEclipse6.0-一個(gè)支持J2EE,Java,Web,portlet等開發(fā)的IDEMySQL5.0-一個(gè)主流的

18、開源數(shù)據(jù)庫Tomcat-5.5-Web服務(wù)器具體環(huán)境變量里面需要的配置有:JAVA_HOME D:Program FilesJavajdk1.5.0_16CLASSPATH .; %JAVA_HOME% libdt.jar; %JAVA_HOME% libtools.jar; %JAVA_HOME% jrelibJIKES_HOME,ANT_HOMEPath:% JAVA_HOME %bin; % JIKES_HOME %bin; %ANT _HOME%bin; 返回目錄Liferay Portlet5.2.2開發(fā)簡單說明開發(fā)簡單說明無論是portal和ext工程,目錄都很繁雜,其實(shí)我們只要關(guān)

19、注3個(gè)目錄就夠了。這就是ext工程對應(yīng)目錄: ext-implsrc ext-servicesrc portal-web而portal工程項(xiàng)目里面的3個(gè)目錄:portal-implsrc和portal-servicesrc是portal工程已經(jīng)實(shí)現(xiàn)的所有portlet的java代碼和部分資源文件;portal-web目錄是放置網(wǎng)頁文件和portal的配置文件。ext工程對應(yīng)目錄ext-implsrc,ext-servicesrc和portal-web跟portal是很類似的。ext-implsrc,ext-servicesrc是放置我們自己開發(fā)的portlet的java代碼。ext-web是自

20、己開發(fā)portlet對應(yīng)的網(wǎng)頁文件和配置文件。 返回目錄Portlets開發(fā)介紹流程開發(fā)介紹流程SSH PortletSpring+Struts+Hibernate框架的實(shí)際應(yīng)用StrutsPortlet:Struts實(shí)現(xiàn)了MVCStruts在struts-config.xml中提供了集中的頁面流管理.這使得它高度可升級并且使得你模塊化代碼流程.JSP Portlet是開發(fā)中使用頻率最高的開發(fā)方式JSPStrutsSSH Configuration Portlet的開發(fā)流程采用的也是Struts Portlet的開發(fā)流程Configuration簡單復(fù)雜JSP Portlet開發(fā)開發(fā)開發(fā)JSP

21、 Portlet流程創(chuàng)建JSP Portlet流程事項(xiàng)定義portlet配置portletJSP開發(fā)發(fā)布、運(yùn)行、測試JSP Portlet開發(fā)流程開發(fā)流程JSP Portlet是開發(fā)中使用頻率最高的開發(fā)方式,主要原因有兩個(gè):(1)當(dāng)配置好Portlet之后,只需要修改JSP文件。而JSP文件支持hot deploy,這就會(huì)在開發(fā)過程中節(jié)省好多等待ant deploy和liferay tomcat startup的時(shí)間。(2)開發(fā)流程也相對簡單。 推薦的JSP Portlet推薦開發(fā)流程如右圖,當(dāng)然也不用完全按照如下流程來做,只要完成相關(guān)配置的修改即可。在在Liferay中創(chuàng)建一個(gè)中創(chuàng)建一個(gè)JS

22、P Portlet:開發(fā)流程:1. 定義portlet portlet-ext.xml 定義Portlet liferay-portlet-ext.xml 配置Portlet實(shí)例屬性2. 國際化配置文件 Lperties3. 歸類Portlet Liferay-display.xml 分類組織Portlet4. 創(chuàng)建JSP view.jsp 定義我們需要的頁面開發(fā)目錄結(jié)構(gòu):配置文件放在這個(gè)目錄下: extext-webdocrootWEB-INFJSPs將會(huì)放在這個(gè)目錄下: extext-webdocroothtmlportletextLiferay如何決定哪個(gè)J

23、SP應(yīng)該被首先顯示?對于JSP Portlet, JSP直接指向了從portlet-ext.xml中定義的頁面.定義定義portletMy_JSP_PortletJSP Portletcom.liferay.util.bridges.jsp.JSPPortletview-jsp/html/portlet/ext/myjspportlet/view.jsp0text/htmlcom.liferay.portlet.StrutsResourceBundlepower-useruser配置文件是: extext-webdocrootWEB-INFportlet-ext.xml注意:注意:1、Port

24、lets是通過,來唯一定義的。因此,你要確保的唯一性。2、要?jiǎng)?chuàng)建JSPPortlet,屬性應(yīng)該設(shè)置為com.liferay.util.bridges.jsp.JSPPortlet。3、中的值“view-jsp”不能修改。4.、 中的值-指定哪個(gè)JSP應(yīng)該被首先顯示配置配置Portlet實(shí)例屬性實(shí)例屬性,分類組織,國際化分類組織,國際化My_JSP_Portlettrue/css/test.css/js/test.js定義Portlet實(shí)例屬性:配置文件是: extext-webdocrootWEB-INF liferay-portlet-ext.xml分類組織Portlets:配置文件是: e

25、xtext-webdocrootWEB-INF liferay-display.xml注意:注意:這里的元素的值 My_JSP_Portlet必須要和portlet-ext.xml中的元素的值一致的。 其中的key值(即javax.portlet.title.My_JSP_Portlet),是“javax.portlet.title”+“portlet名字”(即在portlet-ext.xml中添加的portlet的的值)定義Portlet名稱:配置文件是: extext-implsrccontentLpertiesjavax.portlet.title.My_J

26、SP_Portlet=My JSP PortletJSP開發(fā)開發(fā)-創(chuàng)建創(chuàng)建JSP頁面頁面創(chuàng)建JSP:在 extext-web docroothtmlportletext目錄下創(chuàng)建文件目錄myjspportlet在新建的myjspportlet目錄下,添加一個(gè)文件叫init.jsp,在文件中加入下面內(nèi)容:現(xiàn)在,再在新建的myjspportlet目錄下添加一個(gè)文件view.jsp 在view.jsp中寫下: 問題出來了,portal如何得知怎樣加載這些特殊的文件? 如果你返回觀察添加到portlet-ext.xml中的portlet元素,你將會(huì)觀察到你初始化了一個(gè)view-jsp參數(shù),它的值是/e

27、xt/myjspportlet/view.jsp。通過指定這個(gè)init-param,你將使得portlet加載一個(gè)默認(rèn)的JSP。Hello,its my first jsp portlet!發(fā)布、運(yùn)行和測試發(fā)布、運(yùn)行和測試發(fā)布:執(zhí)行ext項(xiàng)目根目錄下的build.xml文件ant deploy,部署這些你做的對你的應(yīng)用的改變,然后重啟tomcat服務(wù)器。運(yùn)行和測試:訪問地址:http:/localhost:8080。利用用戶名:;密碼:test登錄進(jìn)入系統(tǒng)。在選擇應(yīng)用的窗口中選擇我們剛剛添加的PortletMy JSP Portlet,如果在頁面上會(huì)增加一個(gè)Portlet(如下圖),顯示出你剛

28、剛添加的內(nèi)容,那么部署就成功了。添加應(yīng)用選中添加Struts Portlet開發(fā)開發(fā)開發(fā)Struts Portlet流程Struts Portlet開發(fā)小結(jié)定義portlet配置portlet定義頁面流和頁面布局JSP頁面開發(fā)發(fā)布、運(yùn)行、測試定義ActionStruts Portlet開發(fā)流程開發(fā)流程StrutsPortlet推薦的開發(fā)流程如下,當(dāng)然也不用完全按照如下流程來做,只要完成相關(guān)配置的修改即可。為什么用為什么用Struts? Struts實(shí)現(xiàn)了MVC.雖然有其他框架實(shí)現(xiàn)MVC,Struts是最廣泛應(yīng)用和最成熟的技術(shù). 什么是MVC?MVC將顯示代碼從業(yè)務(wù)邏輯中分離出來. Struts

29、在struts-config.xml中提供了集中的頁面流管理.這使得它高度可升級并且使得你模塊化代碼流程. 通過使用struts,你可以使用一些最佳實(shí)踐,已經(jīng)集成在框架中.為什么用為什么用tiles?一個(gè)頁面布局是一個(gè)使用包含典型聲明的設(shè)計(jì).如果有100個(gè)JSPs并且頭和尾都需要改變,所有的100JSPs都需要改變.用tiles,一個(gè)簡單的模板可以被用于定義頁面布局.只要模板改變,所有頁面將會(huì)依次改變。 在在Liferay中創(chuàng)建一個(gè)中創(chuàng)建一個(gè)Struts Portlet:開發(fā)流程:1. 定義portlet portlet-ext.xml 定義Portlet liferay-portlet-ex

30、t.xml 配置Portlet實(shí)例屬性2. 國際化配置文件(定義Portlet名稱) Lperties3. 歸類Portlet Liferay-display.xml 分類組織Portlet4. 定義頁面流和布局 struts-config.xml定義頁面流 titles-defs.jsp定義頁面布局5.定義Action Class6. 創(chuàng)建JSP view.jsp 定義我們需要的頁面開發(fā)目錄結(jié)構(gòu):配置文件放在這個(gè)目錄下: extext-webdocrootWEB-INFJSPs將會(huì)放在這個(gè)目錄下: extext-webdocroothtmlportletextS

31、truts中Action放在這個(gè)目錄下: extext-implsrccomportlet注意:Liferay如何決定哪個(gè)JSP應(yīng)該被首先顯示?對于JSP Portlet, JSP直接指向了從portlet-ext.xml中定義的頁面.對于Struts portlets,這一系列過程通過tiles-defs.xml來定義.“struts_action”鏈接到哪里?鏈接到struts-config.xml.定義定義portletEXT_4Library Portletcom.liferay.portlet.StrutsPortletview-action/ext/library/add_book

32、0text/htmlcom.liferay.portlet.StrutsResourceBundlepower-useruser配置文件是: extext-webdocrootWEB-INFportlet-ext.xml注意:注意:1、Portlets是通過,來唯一定義的。因此,你要確保的唯一性。2、要?jiǎng)?chuàng)建Struts Portlet,屬性應(yīng)該設(shè)置為com.liferay.portlet.StrutsPortlet。3、中的值“view-action”不能修改。 4、 中的值- struts_action”鏈接到struts-config.xml中的path屬性值配置配置Portlet實(shí)例屬性

33、、分類組織,國際化實(shí)例屬性、分類組織,國際化EXT_4ext/libraryfalse定義Portlet實(shí)例屬性:配置文件是: extext-webdocrootWEB-INF liferay-portlet-ext.xml分類組織Portlets:配置文件是: extext-webdocrootWEB-INF liferay-display.xml注意:注意:這里的元素的值 EXT_4必須要和portlet-ext.xml中的元素的值一致的。 其中的key值(即javax.portlet.title. EXT_4),是“javax.portlet.title”+“portlet名字”(即在p

34、ortlet-ext.xml中添加的portlet的的值)定義Portlet名稱:配置文件是: extext-implsrccontentLpertiesjavax.portlet.title.EXT_4=Library定義定義Struts頁面流、頁面流、 tiles頁面布局頁面布局定義Struts頁面流:配置文件是: extext-webdocrootWEB-INF struts-config.xml定義tiles頁面布局:配置文件是: extext-webdocrootWEB-INF tiles-defs.xml注意:注意:這里的path=/ext/libra

35、ry/add_book值就是portlet-ext.xml中對應(yīng)的view-action的值。 這理portlet.ext.library 繼承 portlet。這意味著portlet.ext.library將會(huì)使用 portlet.jsp 作為它的模板。portlet.ext.library.view 繼承 portlet.ext.library。這意味著portlet.ext.library.view portlet.ext.library也將會(huì)使用portlet.jsp 作為它的模板注意:注意:這里的name=portlet.ext.library.view值就是struts-confi

36、g.xml中對應(yīng)的forward=portlet.ext.library.view的值定義定義Actionpackage com.ext.portlet.library.action;import javax.portlet.ActionRequest;import javax.portlet.ActionResponse;import javax.portlet.PortletConfig;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;import org.apache.struts.action

37、.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import com.liferay.portal.struts.PortletAction;public class AddBookAction extends PortletAction public void processAction(ActionMapping mapping, ActionForm form,PortletConfig config, ActionRequest

38、 req, ActionResponse res)throws Exception String bookTitle = req.getParameter(book_title);if (null = bookTitle | .equals(bookTitle) setForward(req, portlet.ext.library.error); else setForward(req, portlet.ext.library.success);public ActionForward render(ActionMapping mapping, ActionForm form,Portlet

39、Config config, RenderRequest req, RenderResponse res)throws Exception if (getForward(req) != null & !getForward(req).equals() return mapping.findForward(getForward(req); else return mapping.findForward(portlet.ext.library.view);添加目錄: extext-implsrccomextportletlibraryaction,并在目錄下建Action文件JSP開發(fā)開發(fā)-創(chuàng)建創(chuàng)

40、建JSP頁面頁面在 extext-web docroothtmlportletext目錄下創(chuàng)建文件目錄liberay在新建的liberay目錄下,添加文件init.jsp,view.jsp,success.jsp,error.jspInit.jsp里面寫下面代碼Add a book entry to the Library:form action=portlet:actionURL windowState= method=post name=fmBook Title:input name=book_title size=20 type=text value=input type=button

41、value=Submit onClick=submitForm(document.fm);view.jsp里面寫入下面的代碼其中,這將會(huì)讓我們使用在上一步這定義的init.jsp其中實(shí)際對應(yīng)目錄是:portalportal-webdocroothtmlcommoninit.jsp。這將會(huì)讓我們使用Liferay 標(biāo)簽庫JSP開發(fā)開發(fā)-創(chuàng)建創(chuàng)建JSP頁面頁面在liberay目錄下面創(chuàng)建文件error.jsp和success.jsp。如果添加書成功,則返回success.jsp頁面,顯示書名;如果添加書失敗,則返回error.jsp,提示添加失敗。Book Title:error.jsp里面寫入下

42、面的代碼:Its failed to add a book!success.jsp里面寫入下面的代碼:發(fā)布、運(yùn)行和測試發(fā)布、運(yùn)行和測試發(fā)布:執(zhí)行ext項(xiàng)目根目錄下的build.xml文件ant deploy,部署這些你做的對你的應(yīng)用的改變,然后重啟tomcat服務(wù)器。運(yùn)行和測試:訪問地址:http:/localhost:8080。利用用戶名:;密碼:test登錄進(jìn)入系統(tǒng)。在選擇應(yīng)用的窗口中選擇我們剛剛添加的PortletLibrary,如果在頁面上會(huì)增加一個(gè)Portlet(如下圖),顯示出你剛剛添加的內(nèi)容,那么部署就成功了。添加應(yīng)用選中添加Sturts Portlet小結(jié)小結(jié)高度總覽 一個(gè)UR

43、L或Uri通過控制器傳送. 控制器決定哪個(gè)頁面應(yīng)該被顯示出來. 我們開始頁面指向portlet-ext.xml的view-action控制器MainServlet.java詳細(xì)視圖:Liferay如何決定哪個(gè)如何決定哪個(gè)JSP應(yīng)該被首先顯示應(yīng)該被首先顯示?Sturts Portlet小結(jié)小結(jié)對于JSP Portlet, JSP直接指向了從portlet-ext.xml中定義的頁面.對于Struts portlets,這一系列過程通過tiles-defs.xml來定義.Sturts Portlet小結(jié)小結(jié) Liferay將會(huì)檢查struts-path來檢查是否一個(gè)用戶有訪問這個(gè)portlet的權(quán)

44、限.注意:當(dāng)你看到錯(cuò)誤(error)信息后:你沒有足夠的權(quán)限來訪問這個(gè)portlet.那么: 1. 檢查你是否在portlet-ext.xml中有正確的定義用戶權(quán)限. 2. 檢查來觀察是否定義正確.Configuration Portlet開發(fā)開發(fā)開發(fā)Configuration Portlet流程Struts Portlet開發(fā)小結(jié)定義portlet配置portlet定義頁面流和頁面布局JSP頁面開發(fā)發(fā)布、運(yùn)行、測試定義ActionSSH Portlet開發(fā)開發(fā)開發(fā)SSH Portlet流程Struts Portlet開發(fā)小結(jié)定義portlet配置portlet定義頁面流和頁面布局JSP頁面開

45、發(fā)發(fā)布、運(yùn)行、測試定義ActionSSH Portlet開發(fā)流程開發(fā)流程在在Liferay中創(chuàng)建一個(gè)中創(chuàng)建一個(gè)SSH Portlet:開發(fā)目錄結(jié)構(gòu):配置文件放在這個(gè)目錄下: extext-webdocrootWEB-INFJSPs將會(huì)放在這個(gè)目錄下: extext-webdocroothtmlportletextStruts中Action放在這個(gè)目錄下: extext-implsrccomportletSrc文件夾名放在這個(gè)目錄下 : extext-implsrccomextportlet 例如library模塊,就在 extext-implsrccomextportlet下建目錄librar

46、yService.xml放在這個(gè)目錄下 extext-implsrccomextportletlibrary 推薦:一個(gè)模塊的實(shí)體表對應(yīng)放在各自模塊下同一個(gè)service.xml中ext-implsrc,ext-servicesrc是放置我們自己開發(fā)的portlet的java代碼。ext-web是自己開發(fā)portlet對應(yīng)的網(wǎng)頁文件和配置文件。開發(fā)SSH,目地來新建一個(gè)自己portlet。這里我們采用portal里面代碼規(guī)范生成機(jī)制。對于持久化層和服務(wù)層的類都可以自動(dòng)產(chǎn)生。在在Liferay中創(chuàng)建一個(gè)中創(chuàng)建一個(gè)SSH Portlet:開發(fā)流程:1.建立業(yè)務(wù)數(shù)據(jù)表2.建立service.xml文

47、件3.修改ant文件,增加ant任務(wù) 在extext-impl根目錄下的build-parent.xml文件添加build-service任務(wù)4.生成實(shí)體類和持久化類 執(zhí)行extext-impl根目錄下的build.xml文件build 具體的 任務(wù),生成hibernate的實(shí)體類和持久化類6.在實(shí)體類和持久化類,增加自己需要的業(yè)務(wù)操作7.自定義portlet及配置Portlet屬性 portlet-ext.xml 定義Portlet liferay-portlet-ext.xml 配置Portlet實(shí)例屬性8. 國際化配置文件 Lperties9. 歸類Port

48、let Liferay-display.xml 分類組織Portlet10. 定義頁面流和布局 struts-config.xml定義頁面流 titles-defs.jsp定義頁面布局11.定義Action12. 創(chuàng)建JSP 定義我們需要的頁面建立業(yè)務(wù)數(shù)據(jù)表和代碼模板配置文件建立業(yè)務(wù)數(shù)據(jù)表和代碼模板配置文件首先、建立業(yè)務(wù)數(shù)據(jù)表,在數(shù)據(jù)庫里面新建一個(gè)表UsersEntry,字段userid,username,password.并往表中插入幾個(gè)條數(shù)據(jù)。接下來,建立代碼模板配置文件建立service.xml文件:在ext-implsrccomextportlet 新建一個(gè)目錄users,在目錄下建立

49、一個(gè)service.xml文件,文件內(nèi)容為:UsersUsersEntry 修改修改ant文件,增加文件,增加ant任務(wù),并執(zhí)行任務(wù),并執(zhí)行ant任務(wù)任務(wù)建好service.xml文件后,我們在ext-impl目錄下打開build-perent.xml 在.的下面添加任務(wù): 然后在MyEclipse的ant視圖里面打開ext-impl目錄下的build.xml執(zhí)行build-service-portlet-user任務(wù)。 之后,我們會(huì)發(fā)現(xiàn)在ext-implsrccomextportletusers ,和 ext-servicesrccomextportletusers下面多了幾個(gè)目錄和文件。這

50、是都是系統(tǒng)自動(dòng)產(chǎn)生的hibernate的實(shí)體類和持久化類。如果我們再細(xì)心些也可發(fā)現(xiàn)在ext-implsrcMETA-INF目錄下配置文件都多些內(nèi)容。這些都是系統(tǒng)已經(jīng)自動(dòng)將對應(yīng)的實(shí)體類、持久化類、工具類等配置為相應(yīng)的javabean、util、service等。這樣做無疑節(jié)省了很多時(shí)間,而且減少我們?nèi)斯づ渲玫腻e(cuò)誤。業(yè)務(wù)實(shí)現(xiàn)編碼業(yè)務(wù)實(shí)現(xiàn)編碼現(xiàn)在我們要實(shí)現(xiàn)一個(gè)查詢功能,將數(shù)據(jù)庫中表名users中所有記錄的username,password查詢出來,并顯示在前臺(tái)。(1)打開ext-servicesrccomextportletusersservice下UsersEntryService文件,建立一個(gè)名

51、為getAllUsers的抽象方法;public List getAllUsers() throws SystemException;(2)然后在ext-implsrccomextportletusersserviceimplUsersEntryServiceImpl.java中實(shí)現(xiàn)上面的接口UsersEntryService.即加上如下方法:public List getAllUsers() throws SystemException return UsersEntryUtil.findAll();(3)同樣spring的service層 也是通過輔助類作為對外唯一入口,所以在UsersE

52、ntryServiceUtil里面增加一個(gè)方法getAllUsers作為service層的方法getAllUsers的入口。如下: public static List getAllUsers() throws SystemException return _service.getAllUsers(); 需要注意的是service層接口對應(yīng)具體實(shí)現(xiàn)是由工廠類指定。他們捆綁關(guān)系可以查看spring配置文件信息。定義定義Action-完成響應(yīng)客戶端請求完成響應(yīng)客戶端請求在srccomextportletusersaction目錄下建立一個(gè)ViewUserAction.java文件package c

53、om.ext.portlet.users.action;import com.ext.portlet.users.model.UsersEntryModel;import com.ext.portlet.users.service.UsersEntryServiceUtil;import com.liferay.portal.struts.PortletAction;import java.util.ArrayList;import java.util.List;import javax.portlet.PortletConfig;import javax.portlet.RenderRequ

54、est;import javax.portlet.RenderResponse;import javax.portlet.WindowState;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;public class ViewUsersAction extends PortletAction public ActionForward render(ActionMapping

55、 mapping, ActionForm form,PortletConfig config, RenderRequest req, RenderResponse res)throws Exception if (req.getWindowState().equals(WindowState.NORMAL) return mapping.findForward(portlet.ext.users.view); else List users = UsersEntryServiceUtil.getAllUsers(); List usernames = new ArrayList(); List

56、 password = new ArrayList(); for (int i = 0; i users.size(); i+) usernames.add(UsersEntryModel) users.get(i).getUsername();password.add(UsersEntryModel) users.get(i).getPassword(); req.setAttribute(users, usernames); req.setAttribute(password, password); req.setAttribute(count, + users.size(); retur

57、n mapping.findForward(portlet.ext.users.view_users); 建立自己的建立自己的portlet里面大概功能是如果porlet的窗口狀態(tài)時(shí)普通,則定向到一個(gè)叫portlet.ext.myuser.view的目標(biāo)上。如果窗口狀態(tài)是最大化,那么就從調(diào)用userLocalServiceUtil,從數(shù)據(jù)庫里面獲取所有人員信息。Portlet的生成建立自己的portlet。在ext-implsrccomextportletusers下面新建文件UsersPortlet.java:package com.ext.portlet.users;import java

58、.io.IOException;import javax.portlet.PortletException;import javax.portlet.PortletPreferences;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;import com.liferay.portlet.StrutsPortlet;public class UsersPortlet extends StrutsPortlet public void doView(RenderRequest renderRequest

59、,RenderResponse renderResponse) throws IOException, PortletException PortletPreferences prefs = renderRequest.getPreferences();System.out.println(prefs.getValue(test, );super.doView(renderRequest, renderResponse); 該portlet重載了doview方法。如果自己portlet對view和edit有自己特性,那么只要重載doview和doedit就可以了?,F(xiàn)在portlet的內(nèi)容是空的,我們用jsp頁面來展示用戶名稱方式來填充portlet里面內(nèi)容。 創(chuàng)建創(chuàng)建jsp頁面頁面-來填充來填充portlet里面內(nèi)容里面內(nèi)容在 ext-webdocroothtmlportletext目錄下建立目錄users,并在users目錄下建立init.jsp文件 然后,建立

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論