




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ContentsLiferay介紹JSP Portlet開發(fā)Struts Portlet開發(fā)Configuration Portlet開發(fā)SSH Portlet開發(fā)開發(fā)實踐Liferay介紹介紹Liferay概述及特點什么是Portal?Portlet vs Servlet 開發(fā)Portlet 的生命周期Liferay Portal 工作原理規(guī)范和標準推薦開發(fā)使用工具簡單開發(fā)說明返回上級目錄返回上級目錄返回目錄返回目錄Liferay概述及特點概述及特點v Liferay 是專門為符合Portlet API(JSR268)的門戶單元設計開發(fā)的。而且有許多不錯的門戶單元附加在Lliferay 中,
2、包括郵件、文檔庫、日歷、公告板等,它們也可以作為開發(fā)學習時的例子使用。v Liferay Portal代表了完整的J2EE應用,使用了Web、EJB以及JMS等技術,特別是其前臺界面部分使用Struts 框架技術,基于XML的portlet配置文件可以自由地動態(tài)擴展,使用了Web Services來支持一些遠程信息的獲取,使用 Apahce Lucene實現(xiàn)全文檢索功能。 主要特點:1、提供單一登陸接口,多認證模式(LDAP或SQL);2、管理員能通過用戶界面輕松管理用戶,組,角色;3、用戶能可以根據需要定制個性化的portal layout;4、能夠在主流的J2EE應用服務器上運行,如JBo
3、ss+Jetty/Tomcat,JOnAS;5、支持主流的數據庫,如PostgreSQL,MySQL;6、使用了第三放的開源項目,如Spring, Hibernate, Lucene, Struts;7、支持包括中文在內的多種語言;8、采用最先進的技術 Java, EJB, JMS, SOAP, XML;什么是什么是Portal?許斌Portal 是基于Web 的,以“應用整合”和“消除信息孤島”為最終目的,提供單點登錄、內容聚合、個性化門戶定制等功能的綜合信息系統(tǒng)。完整的Portal 通常由Portal 服務器、Portlet 容器、Portlet 構成。1Portal 服務器是容納Port
4、let 容器,支持Portlet 呈現(xiàn)的普通或者特殊Web 服務器。 Portal 服務器通常會提供個性化設置、單點登錄、內容聚合、信息發(fā)布、權限管理等功能,支持各種信息數據來源,并將這些數據信息放在網頁中組合而成,提供個性化的內容定制,不同權限的瀏覽者能夠瀏覽不同的信息內容。2Portlet 容器提供Portlet 執(zhí)行的環(huán)境,包含很多Portlet 并管理它們的生命周期,保存Portlet 的定制信息。Portlet 容器是普通Web Servlet 容器的擴展,接收到來自Portal 的請求后,接著將這個請求傳遞給存在Portal 容器的Portlet 執(zhí)行。3Portlet 是Port
5、al 中最重要的組件,負責在Portal 中呈現(xiàn)信息內容,有相應的生命周期。通過自定義Portlet,用戶很容易定義個性化的Portal 頁面。Portlet是以Java技術為技術的Web組件, 由Portlet 容器負責管理、處理請求并返回動態(tài)頁面,可以作為Portal 的可即插即用的界面組件。返回目錄Portlet vs Servlet 開發(fā)開發(fā)開發(fā)一個Java Portlet 類似于開發(fā)一個基于web應用的Servlet開發(fā)相似的地方:vPortlet 也是 Java 技術的 web 組件vPortlet 也是有特定的 container 在管理vPortlet 可以動態(tài)產生各種內容vP
6、ortlet 的生命周期由 container 所管理vPortlet 和客戶端的互動是通過 request/response 的機制主要的區(qū)別在于:vPortlet只能生成標記段,不是整個文檔, Portal將會連接一些portlets的標記段并且創(chuàng)建一個整個頁面返回給用戶.v接受請求的類必須繼承javax.portlet.Portlet 而不是javax.servlet.http.HttpServlet.v一個portlet請求可能涉及兩個狀態(tài)進程:1. 對于大多數的請求來說,一個portlet將會執(zhí)行一個狀態(tài)轉換操作,這與action 狀態(tài)有關系,并且通過一個方法processActio
7、n來實現(xiàn).并不是需要每一個Action 狀態(tài).包含一個action 狀態(tài)的請求被注入到ActionURL,與此同時那些只含有render phase 的請求被注入到RenderURL.2. 接下來所有與頁面有關聯(lián)的,將要被返回的其他的portlets的render狀態(tài)可能會在任何將HTML標記段來描述他們自身的請求中來被調用.Portlet通過一個render方法實現(xiàn)這種功能.返回目錄返回目錄Portlet vs Servlet 開發(fā)開發(fā)Portlet 有一些附加的功能是 Servlet 所沒有的:vPortlet 能夠存取及儲存永久配置文件及定制資料。vPortlet 可以存取使用者數據vP
8、ortlet 具有 URL 的重寫功能在文件中去動態(tài)建立連結,允許 portal server 不用去知道如何在網頁的片 段之中建立連結及動作。vPortlet 可以儲存臨時性的數據在 Portlet session 之中,擁有兩個不同的范圍 :application-wide scope 及 Portlet private scope 。 Portlet 不具有一些功能, 但是 Servlet 卻有提供:vServlet 具有設置輸出的文字編碼( character set encoding)方式vServlet 可以設置 HTTP 輸出的 headervServlet 才能夠接收客戶對于
9、portal 發(fā)出的 URL 請求返回目錄返回目錄Portlet 的生命周期的生命周期 一個Portlet有著良好的生命周期管理,定義了怎樣裝載,實例化和初始化,怎樣響應來自客戶端的請求及怎樣送出服務。這個Portlet生命周期由Portlet接口的init,processAction,render和destroy方法來表達。載入和實例化載入和實例化:Portlet 容器負責載入和實例化Portlet。當Portlet 容器運行Portlet 應用或者延遲到Portlet 需要服務使用者的請求時,Portlet 就會被載入并實例化。載入Portlet 類后,Portlet 類隨即被實例化。初始
10、化初始化:Portlet 類實例化后,Portlet 容器還需要初始化Portlet。以調用Portlet 去響應客戶端的請求。Portlet 容器呼叫Portlet 接口中的init 方法初始化Portlet。擴展自PortletConfig的類可以取出定義在部署描述文件中的初始化參數,以及Resource Bundle。初始化異常初始化異常:在 Portlet 初始化期間,Portlet 可能會丟出 UnavailableException 或PortletException 異常。此時,Portlet 容器不能把 Portlet 置入已啟動的服務,并且 Portlet容器必需釋放這個 P
11、ortlet。 destory 方法不能被呼叫,因為初始化被認為執(zhí)行失敗。發(fā)生 失敗后,Portlet 容器會嘗試著重新實例化及初始化 Portlet。這個異常處理的規(guī)則是:由一個UnavailableException 指定一個不能執(zhí)行的最小時間,當此異常發(fā)生時,Portlet 容器必需等到指定時間過去后才產生并且初始化一個新的 Portlet。在初始化過程中所丟出的 Runtime Exception 異常,被當作 PortletException 來處理。返回目錄返回目錄Liferay Portal 工作原理(工作原理(1)Company L Portal 系統(tǒng)根據需要由一個或者多個Po
12、rtal 頁面組成,每個Portal 頁面包含零個或者多個的Portlet。每個Portlet 呈現(xiàn)自己的信息內容,以此實現(xiàn)內容聚合。通過定義每個Portlet 的可用權限,實現(xiàn)個性化的桌面信息定制。 每個Portlet 對外表現(xiàn)為一個小窗口,有自己的默認樣式和窗口狀態(tài)。 JSR168 規(guī)范定義了三個Portlet 模式: 瀏覽、編輯和幫助。如右圖,Portlet 有自己的標題,瀏覽狀態(tài)下支持編輯、關閉、上移、下移、最大化、最小化功能,編輯狀態(tài)下支持返回和關閉功能。從各種數據來源提取的信息以Portlet 內容的形式呈現(xiàn)在Portal 中。 同時Portal 是可以根據使用者的角色,來決定是要
13、提供(顯示)哪幾個Portlet 模式給使用者操作。返回目錄返回目錄Liferay Portal 工作原理(工作原理(2)Company LPortal 頁面創(chuàng)建過程如下: Portlet 在 Portlet 容器內執(zhí)行Portlet容器將這些內容提交給 Portlet 服務器,Portlet 服務器依照這些內容建立Portal頁面,然后將它傳給客戶端呈現(xiàn)。具體流程如右上圖:Portal 頁面的請求過程如下: 使用者經由客戶端設備(例如瀏覽器)存取 Portal,Portal 根據接收到的請求決定哪些 Portlet 需要被執(zhí)行以滿足需求。Portal 通過Portlet容器呼叫 Portle
14、t,然后由Portlet產生的片段建立Portal頁面,再傳回客戶端呈現(xiàn)給使用者。具體流程如右下圖:Portlet 開發(fā)完畢后,部署到Portal 服務器,由Portal 服務器負責組織、權限控制現(xiàn)。返回目錄返回目錄Java Portlet 規(guī)范規(guī)范(JSR-268)和和WSRPJSR-268:由于Liferay 支持Portlet 規(guī)范(JSR-268).任何基于此規(guī)范的Portlet均可正常運行.Java 平臺提供了一種基于JSR-168的標準,標準化portlets如何與其他portlet 容器集成并在不同的portal 產品之間來保證兼容性. Liferay Portal 提供了一種1
15、00%便利的portlet 容器來保證任何基于標準規(guī)范的portlet將會在Liferay中運行在JSR-268規(guī)范中,一個portlet應用可以聚集其他的不同的portlets并且打包成一個WAR文件,就像一個標準的Java web應用一樣.在WAR文件中,以portlet.xml 來定義portlets 的應用, portlet.xml 文件放在WAR 文件中的WEB-INF目錄中. Java Portlet 規(guī)范包括portlet 容器.WSRP: WSRP 是OASIS Web Service for Remote Portlet 的縮寫。WSRP 是Web Service 的一種新的
16、商業(yè)應用,一種新的標準,主要用來簡化Portal 對于各種資源或者程序整合的復雜度,可以避免編程帶來的整合麻煩和問題。而且Portal 管理員可以從海量的WSRP 服務中選擇需要的功能用以整合到目前所用的Portal 中。它有三種角色:生產者 提供Portlet消費者 使用Portlet終端用戶 最終用戶 它的特點在于生產者將消費者所需要的信息通過WSRP 返回給消費者,這些信息是相對標記片斷,例如HTML、XHTML 等,可以直接嵌入用戶的頁面中,而不用像Web Service一樣開發(fā)用戶端接口。實現(xiàn)這個規(guī)范,Portal 可以跟各式各樣的數據源打交道,徹底終結信息孤島的窘境。返回目錄Lif
17、eray Portlet5.2.2開發(fā)推薦使用工具開發(fā)推薦使用工具JDK 1.5,或者 1.5 -java開發(fā)工具包Jre1.5,或者1.6 -java程序運行環(huán)境Jikes 1.22-Jikes是一個IBM創(chuàng)建的Java編譯器,比Sun JDK的編譯器要快.Ant 1.7-一個基于 Java 的生成工具。Subversion -一個簡單的版本控制工具,推薦你將所有的代碼和配置文件放在一個版本控制工具中,Subversion是一個免費的開源的版本控制工具。Eclipse3.3+MyEclipse6.0-一個支持J2EE,Java,Web,portlet等開發(fā)的IDEMySQL5.0-一個主流的
18、開源數據庫Tomcat-5.5-Web服務器具體環(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工程,目錄都很繁雜,其實我們只要關
19、注3個目錄就夠了。這就是ext工程對應目錄: ext-implsrc ext-servicesrc portal-web而portal工程項目里面的3個目錄:portal-implsrc和portal-servicesrc是portal工程已經實現(xiàn)的所有portlet的java代碼和部分資源文件;portal-web目錄是放置網頁文件和portal的配置文件。ext工程對應目錄ext-implsrc,ext-servicesrc和portal-web跟portal是很類似的。ext-implsrc,ext-servicesrc是放置我們自己開發(fā)的portlet的java代碼。ext-web是自
20、己開發(fā)portlet對應的網頁文件和配置文件。 返回目錄Portlets開發(fā)介紹流程開發(fā)介紹流程SSH PortletSpring+Struts+Hibernate框架的實際應用StrutsPortlet:Struts實現(xiàn)了MVCStruts在struts-config.xml中提供了集中的頁面流管理.這使得它高度可升級并且使得你模塊化代碼流程.JSP Portlet是開發(fā)中使用頻率最高的開發(fā)方式JSPStrutsSSH Configuration Portlet的開發(fā)流程采用的也是Struts Portlet的開發(fā)流程Configuration簡單復雜JSP Portlet開發(fā)開發(fā)開發(fā)JSP
21、 Portlet流程創(chuàng)建JSP Portlet流程事項定義portlet配置portletJSP開發(fā)發(fā)布、運行、測試JSP Portlet開發(fā)流程開發(fā)流程JSP Portlet是開發(fā)中使用頻率最高的開發(fā)方式,主要原因有兩個:(1)當配置好Portlet之后,只需要修改JSP文件。而JSP文件支持hot deploy,這就會在開發(fā)過程中節(jié)省好多等待ant deploy和liferay tomcat startup的時間。(2)開發(fā)流程也相對簡單。 推薦的JSP Portlet推薦開發(fā)流程如右圖,當然也不用完全按照如下流程來做,只要完成相關配置的修改即可。在在Liferay中創(chuàng)建一個中創(chuàng)建一個JS
22、P Portlet:開發(fā)流程:1. 定義portlet portlet-ext.xml 定義Portlet liferay-portlet-ext.xml 配置Portlet實例屬性2. 國際化配置文件 Lperties3. 歸類Portlet Liferay-display.xml 分類組織Portlet4. 創(chuàng)建JSP view.jsp 定義我們需要的頁面開發(fā)目錄結構:配置文件放在這個目錄下: extext-webdocrootWEB-INFJSPs將會放在這個目錄下: extext-webdocroothtmlportletextLiferay如何決定哪個J
23、SP應該被首先顯示?對于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、要創(chuàng)建JSPPortlet,屬性應該設置為com.liferay.util.bridges.jsp.JSPPortlet。3、中的值“view-jsp”不能修改。4.、 中的值-指定哪個JSP應該被首先顯示配置配置Portlet實例屬性實例屬性,分類組織,國際化分類組織,國際化My_JSP_Portlettrue/css/test.css/js/test.js定義Portlet實例屬性:配置文件是: 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目錄下,添加一個文件叫init.jsp,在文件中加入下面內容:現(xiàn)在,再在新建的myjspportlet目錄下添加一個文件view.jsp 在view.jsp中寫下: 問題出來了,portal如何得知怎樣加載這些特殊的文件? 如果你返回觀察添加到portlet-ext.xml中的portlet元素,你將會觀察到你初始化了一個view-jsp參數,它的值是/e
27、xt/myjspportlet/view.jsp。通過指定這個init-param,你將使得portlet加載一個默認的JSP。Hello,its my first jsp portlet!發(fā)布、運行和測試發(fā)布、運行和測試發(fā)布:執(zhí)行ext項目根目錄下的build.xml文件ant deploy,部署這些你做的對你的應用的改變,然后重啟tomcat服務器。運行和測試:訪問地址:http:/localhost:8080。利用用戶名:;密碼:test登錄進入系統(tǒng)。在選擇應用的窗口中選擇我們剛剛添加的PortletMy JSP Portlet,如果在頁面上會增加一個Portlet(如下圖),顯示出你剛
28、剛添加的內容,那么部署就成功了。添加應用選中添加Struts Portlet開發(fā)開發(fā)開發(fā)Struts Portlet流程Struts Portlet開發(fā)小結定義portlet配置portlet定義頁面流和頁面布局JSP頁面開發(fā)發(fā)布、運行、測試定義ActionStruts Portlet開發(fā)流程開發(fā)流程StrutsPortlet推薦的開發(fā)流程如下,當然也不用完全按照如下流程來做,只要完成相關配置的修改即可。為什么用為什么用Struts? Struts實現(xiàn)了MVC.雖然有其他框架實現(xiàn)MVC,Struts是最廣泛應用和最成熟的技術. 什么是MVC?MVC將顯示代碼從業(yè)務邏輯中分離出來. Struts
29、在struts-config.xml中提供了集中的頁面流管理.這使得它高度可升級并且使得你模塊化代碼流程. 通過使用struts,你可以使用一些最佳實踐,已經集成在框架中.為什么用為什么用tiles?一個頁面布局是一個使用包含典型聲明的設計.如果有100個JSPs并且頭和尾都需要改變,所有的100JSPs都需要改變.用tiles,一個簡單的模板可以被用于定義頁面布局.只要模板改變,所有頁面將會依次改變。 在在Liferay中創(chuàng)建一個中創(chuàng)建一個Struts Portlet:開發(fā)流程:1. 定義portlet portlet-ext.xml 定義Portlet liferay-portlet-ex
30、t.xml 配置Portlet實例屬性2. 國際化配置文件(定義Portlet名稱) Lperties3. 歸類Portlet Liferay-display.xml 分類組織Portlet4. 定義頁面流和布局 struts-config.xml定義頁面流 titles-defs.jsp定義頁面布局5.定義Action Class6. 創(chuàng)建JSP view.jsp 定義我們需要的頁面開發(fā)目錄結構:配置文件放在這個目錄下: extext-webdocrootWEB-INFJSPs將會放在這個目錄下: extext-webdocroothtmlportletextS
31、truts中Action放在這個目錄下: extext-implsrccomportlet注意:Liferay如何決定哪個JSP應該被首先顯示?對于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、要創(chuàng)建Struts Portlet,屬性應該設置為com.liferay.portlet.StrutsPortlet。3、中的值“view-action”不能修改。 4、 中的值- struts_action”鏈接到struts-config.xml中的path屬性值配置配置Portlet實例屬性
33、、分類組織,國際化實例屬性、分類組織,國際化EXT_4ext/libraryfalse定義Portlet實例屬性:配置文件是: 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中對應的view-action的值。 這理portlet.ext.library 繼承 portlet。這意味著portlet.ext.library將會使用 portlet.jsp 作為它的模板。portlet.ext.library.view 繼承 portlet.ext.library。這意味著portlet.ext.library.view portlet.ext.library也將會使用portlet.jsp 作為它的模板注意:注意:這里的name=portlet.ext.library.view值就是struts-confi
36、g.xml中對應的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里面寫入下面的代碼其中,這將會讓我們使用在上一步這定義的init.jsp其中實際對應目錄是:portalportal-webdocroothtmlcommoninit.jsp。這將會讓我們使用Liferay 標簽庫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ā)布、運行和測試發(fā)布、運行和測試發(fā)布:執(zhí)行ext項目根目錄下的build.xml文件ant deploy,部署這些你做的對你的應用的改變,然后重啟tomcat服務器。運行和測試:訪問地址:http:/localhost:8080。利用用戶名:;密碼:test登錄進入系統(tǒng)。在選擇應用的窗口中選擇我們剛剛添加的PortletLibrary,如果在頁面上會增加一個Portlet(如下圖),顯示出你剛剛添加的內容,那么部署就成功了。添加應用選中添加Sturts Portlet小結小結高度總覽 一個UR
43、L或Uri通過控制器傳送. 控制器決定哪個頁面應該被顯示出來. 我們開始頁面指向portlet-ext.xml的view-action控制器MainServlet.java詳細視圖:Liferay如何決定哪個如何決定哪個JSP應該被首先顯示應該被首先顯示?Sturts Portlet小結小結對于JSP Portlet, JSP直接指向了從portlet-ext.xml中定義的頁面.對于Struts portlets,這一系列過程通過tiles-defs.xml來定義.Sturts Portlet小結小結 Liferay將會檢查struts-path來檢查是否一個用戶有訪問這個portlet的權
44、限.注意:當你看到錯誤(error)信息后:你沒有足夠的權限來訪問這個portlet.那么: 1. 檢查你是否在portlet-ext.xml中有正確的定義用戶權限. 2. 檢查來觀察是否定義正確.Configuration Portlet開發(fā)開發(fā)開發(fā)Configuration Portlet流程Struts Portlet開發(fā)小結定義portlet配置portlet定義頁面流和頁面布局JSP頁面開發(fā)發(fā)布、運行、測試定義ActionSSH Portlet開發(fā)開發(fā)開發(fā)SSH Portlet流程Struts Portlet開發(fā)小結定義portlet配置portlet定義頁面流和頁面布局JSP頁面開
45、發(fā)發(fā)布、運行、測試定義ActionSSH Portlet開發(fā)流程開發(fā)流程在在Liferay中創(chuàng)建一個中創(chuàng)建一個SSH Portlet:開發(fā)目錄結構:配置文件放在這個目錄下: extext-webdocrootWEB-INFJSPs將會放在這個目錄下: extext-webdocroothtmlportletextStruts中Action放在這個目錄下: extext-implsrccomportletSrc文件夾名放在這個目錄下 : extext-implsrccomextportlet 例如library模塊,就在 extext-implsrccomextportlet下建目錄librar
46、yService.xml放在這個目錄下 extext-implsrccomextportletlibrary 推薦:一個模塊的實體表對應放在各自模塊下同一個service.xml中ext-implsrc,ext-servicesrc是放置我們自己開發(fā)的portlet的java代碼。ext-web是自己開發(fā)portlet對應的網頁文件和配置文件。開發(fā)SSH,目地來新建一個自己portlet。這里我們采用portal里面代碼規(guī)范生成機制。對于持久化層和服務層的類都可以自動產生。在在Liferay中創(chuàng)建一個中創(chuàng)建一個SSH Portlet:開發(fā)流程:1.建立業(yè)務數據表2.建立service.xml文
47、件3.修改ant文件,增加ant任務 在extext-impl根目錄下的build-parent.xml文件添加build-service任務4.生成實體類和持久化類 執(zhí)行extext-impl根目錄下的build.xml文件build 具體的 任務,生成hibernate的實體類和持久化類6.在實體類和持久化類,增加自己需要的業(yè)務操作7.自定義portlet及配置Portlet屬性 portlet-ext.xml 定義Portlet liferay-portlet-ext.xml 配置Portlet實例屬性8. 國際化配置文件 Lperties9. 歸類Port
48、let Liferay-display.xml 分類組織Portlet10. 定義頁面流和布局 struts-config.xml定義頁面流 titles-defs.jsp定義頁面布局11.定義Action12. 創(chuàng)建JSP 定義我們需要的頁面建立業(yè)務數據表和代碼模板配置文件建立業(yè)務數據表和代碼模板配置文件首先、建立業(yè)務數據表,在數據庫里面新建一個表UsersEntry,字段userid,username,password.并往表中插入幾個條數據。接下來,建立代碼模板配置文件建立service.xml文件:在ext-implsrccomextportlet 新建一個目錄users,在目錄下建立
49、一個service.xml文件,文件內容為:UsersUsersEntry 修改修改ant文件,增加文件,增加ant任務,并執(zhí)行任務,并執(zhí)行ant任務任務建好service.xml文件后,我們在ext-impl目錄下打開build-perent.xml 在.的下面添加任務: 然后在MyEclipse的ant視圖里面打開ext-impl目錄下的build.xml執(zhí)行build-service-portlet-user任務。 之后,我們會發(fā)現(xiàn)在ext-implsrccomextportletusers ,和 ext-servicesrccomextportletusers下面多了幾個目錄和文件。這
50、是都是系統(tǒng)自動產生的hibernate的實體類和持久化類。如果我們再細心些也可發(fā)現(xiàn)在ext-implsrcMETA-INF目錄下配置文件都多些內容。這些都是系統(tǒng)已經自動將對應的實體類、持久化類、工具類等配置為相應的javabean、util、service等。這樣做無疑節(jié)省了很多時間,而且減少我們人工配置的錯誤。業(yè)務實現(xiàn)編碼業(yè)務實現(xiàn)編碼現(xiàn)在我們要實現(xiàn)一個查詢功能,將數據庫中表名users中所有記錄的username,password查詢出來,并顯示在前臺。(1)打開ext-servicesrccomextportletusersservice下UsersEntryService文件,建立一個名
51、為getAllUsers的抽象方法;public List getAllUsers() throws SystemException;(2)然后在ext-implsrccomextportletusersserviceimplUsersEntryServiceImpl.java中實現(xiàn)上面的接口UsersEntryService.即加上如下方法:public List getAllUsers() throws SystemException return UsersEntryUtil.findAll();(3)同樣spring的service層 也是通過輔助類作為對外唯一入口,所以在UsersE
52、ntryServiceUtil里面增加一個方法getAllUsers作為service層的方法getAllUsers的入口。如下: public static List getAllUsers() throws SystemException return _service.getAllUsers(); 需要注意的是service層接口對應具體實現(xiàn)是由工廠類指定。他們捆綁關系可以查看spring配置文件信息。定義定義Action-完成響應客戶端請求完成響應客戶端請求在srccomextportletusersaction目錄下建立一個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)時普通,則定向到一個叫portlet.ext.myuser.view的目標上。如果窗口狀態(tài)是最大化,那么就從調用userLocalServiceUtil,從數據庫里面獲取所有人員信息。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的內容是空的,我們用jsp頁面來展示用戶名稱方式來填充portlet里面內容。 創(chuàng)建創(chuàng)建jsp頁面頁面-來填充來填充portlet里面內容里面內容在 ext-webdocroothtmlportletext目錄下建立目錄users,并在users目錄下建立init.jsp文件 然后,建立
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度簽約主播虛擬偶像形象授權及運營合作協(xié)議
- 2025年度智能設備擔保合同解除與售后服務保障協(xié)議
- 二零二五年度環(huán)保技術研發(fā)合同履行技術創(chuàng)新個原則協(xié)議
- 二零二五年度農村土地爭議調解與生態(tài)補償合同
- 二零二五年度音樂節(jié)品牌贊助合同
- 二零二五年度企業(yè)總部安全保衛(wèi)保安聘用協(xié)議
- 二零二五年度摩托車整車出口代理轉讓協(xié)議
- 二零二五年度磚廠土地承包及開發(fā)合同
- 2025年度獵聘人才委托招聘與人才激勵服務合同
- 2025年度生物制藥原材料采購合同(含GMP認證)
- 大學生心理健康教育-大學生心理健康導論
- 護理不良事件管理、上報制度及流程
- 房地產公司各崗位職責及組織結構圖
- 七夕節(jié)傳統(tǒng)文化習俗主題教育PPT
- GB/T 1263-2006化學試劑十二水合磷酸氫二鈉(磷酸氫二鈉)
- 鋼棧橋施工與方案
- 生態(tài)農業(yè)PPT瑪雅農業(yè)doc資料
- 《藝術學概論》課件-第一章
- 鐵及其化合物的性質-實驗活動課件
- 動物寄生蟲病學課件
- 2022年陜西省西安交通大學少年班自主招生數學試題及答案
評論
0/150
提交評論