免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
【使用 struts portlet 在門(mén)戶(hù)應(yīng)用程序中實(shí)現(xiàn)頁(yè)面導(dǎo)航】
網(wǎng)站目錄: 網(wǎng)站首頁(yè) —> Java
轉(zhuǎn)載自:www.csdn.net


引言
Struts 是一個(gè)很受歡迎的開(kāi)放源代碼平臺(tái)基礎(chǔ),它是為了使復(fù)雜的 Web 應(yīng)用程序的創(chuàng)建和維護(hù)更加容易而設(shè)計(jì)的。Struts 框架支持模型-視圖-控制器(Model-View-Controller,MVC)模型,并且提出了許多重要的應(yīng)用程序設(shè)計(jì)和實(shí)現(xiàn)需要注意的事項(xiàng)。為了能夠在門(mén)戶(hù)應(yīng)用程序中實(shí)現(xiàn)頁(yè)面導(dǎo)航,WebSphere? Portal V5 提供了一些標(biāo)記,在開(kāi)發(fā)典型 portlet 和 Struts portlet 時(shí)可將這些標(biāo)記用于 JavaServer Pages(JSP)。本文重點(diǎn)討論 Struts 框架創(chuàng)建多模塊的能力,并通過(guò)一個(gè)樣本 Struts portlet 應(yīng)用程序?yàn)槟榻B如何采用 JSP 實(shí)現(xiàn)頁(yè)面導(dǎo)航方法。

我們將關(guān)注以下兩種互補(bǔ)的方法:

  • 如何使用在 WebSphere Portal 中可用的某一 JSP 標(biāo)記來(lái)從 JSP 實(shí)現(xiàn)頁(yè)面導(dǎo)航
    我們將會(huì)看到一個(gè)樣本應(yīng)用程序,包括開(kāi)發(fā)環(huán)境和門(mén)戶(hù)資源的屏幕快照,以及頁(yè)面導(dǎo)航方法的代碼樣本。
  • 如何使用 Struts portlet 框架中內(nèi)置的多模塊支持來(lái)組織 Web 導(dǎo)航方案
    我們將會(huì)看到一些代碼樣本,它們闡述了如何使用頁(yè)面導(dǎo)航特征來(lái)執(zhí)行在門(mén)戶(hù)環(huán)境中轉(zhuǎn)換的多個(gè) Struts 模塊。

本文假定您已基本了解 Struts 應(yīng)用程序,包括如何在 WebSphere Studio Application Developer 中創(chuàng)建 Struts 應(yīng)用程序、如何將 Struts 作為 portlet 進(jìn)行部署,同時(shí)也了解 WebSphere Portal 中的門(mén)戶(hù)資源。(要獲得這些方面的更多信息,請(qǐng)參見(jiàn)參考資料。)

在開(kāi)發(fā)和部署我們的樣本應(yīng)用程序時(shí)用到了以下產(chǎn)品:

  • WebSphere Portal V5.x
  • WebSphere Application Server v5.x
  • 支持 Struts Version 1.1 的 WebSphere Studio Application Developer v5.0.1 (下面稱(chēng)為 Application Developer)。

本文所講解的用于實(shí)現(xiàn)頁(yè)面導(dǎo)航的開(kāi)發(fā)任務(wù)可同時(shí)用于標(biāo)準(zhǔn) portlet 和 Struts portlet。

應(yīng)用程序概述
在樣本應(yīng)用程序中,我們將會(huì)使用位于三個(gè)不同頁(yè)面的三個(gè) portlet。當(dāng)用戶(hù)選擇其中某一 portlet 中的鏈接時(shí),該用戶(hù)會(huì)被定向到另一個(gè)頁(yè)面,其中駐留著另一個(gè) portlet。在整個(gè)文章中我們開(kāi)發(fā)和提到的示例都會(huì)利用多 Struts 模塊將 WebSphere Portal 頁(yè)面導(dǎo)航標(biāo)記并入門(mén)戶(hù)環(huán)境中每個(gè)模塊本身的 JSP 文件中。圖 1 概括性地展示了樣本應(yīng)用程序?qū)⑷绾喂ぷ?;為了把重點(diǎn)放在理解這些方法上,我們特意簡(jiǎn)化了樣本應(yīng)用程序。在本文的后面我們將會(huì)提供應(yīng)用程序的細(xì)節(jié)。

圖 1. 樣本應(yīng)用程序的高級(jí)視圖

構(gòu)建導(dǎo)航結(jié)構(gòu)
WebSphere Portal 提供了自己的 JSP 標(biāo)記來(lái)供 portlet JSP 使用。其中的一個(gè)標(biāo)記,<wps:URLGeneration attribute="value"/>,是用于創(chuàng)建到門(mén)戶(hù)任何地方的頁(yè)面鏈接的。我們使用該標(biāo)記中一個(gè)屬性,contentNode="id|name",來(lái)創(chuàng)建到不同頁(yè)面的 URL,以便構(gòu)建導(dǎo)航結(jié)構(gòu)。該屬性利用一個(gè)惟一的標(biāo)識(shí)符(內(nèi)容節(jié)點(diǎn)的名稱(chēng))來(lái)指定可以從中找到該 portlet 的頁(yè)面。(關(guān)于這一標(biāo)記的更多信息請(qǐng)參見(jiàn)參考資料。)

在 WebSphere Portal 中選擇 Administration => Portal Settings => Custom Unique Names。我們使用 Custom Unique Names 管理 portlet 來(lái)獲取為 contentNode 屬性指定的門(mén)戶(hù)資源的惟一標(biāo)識(shí)符。管理員可以使用 Custom Unique Names portlet 來(lái)查看惟一標(biāo)識(shí)符并為門(mén)戶(hù)資源分配(讓人易讀的)自定義名稱(chēng)。圖 2 顯示了這些已配置的樣本頁(yè)面的惟一標(biāo)識(shí)符和自定義名稱(chēng):

  • Struts_Test
  • Struts_Receiver
  • Struts_Receiver_2

圖 2. Custom Unique Names portlet

在這個(gè)示例中,WebSphere Portal 分配給這些頁(yè)面的惟一標(biāo)識(shí)符分別為 6_0_LT、6_0_P16_0_IP。(您的值可能會(huì)有所不同。)在駐留 WebSphere Portal 的另一臺(tái)機(jī)器上也創(chuàng)建了同樣的門(mén)戶(hù)資源 Struts_TestStruts_Receiver Struts_Receiver_2 portlet 頁(yè)面。為了閱讀和工作的方便,我們也為這些樣本頁(yè)面配置自定義名稱(chēng),并在 JSP 文件中使用這些自定義名稱(chēng)(而不是惟一標(biāo)記符)。

<wps:URLGeneration attribute="value"/> portlet JSP 標(biāo)記主體中,可以使用 <% wpsURL %> 腳本變量將 URL 直接寫(xiě)入輸出流。在這個(gè)示例中,我們使用以下 JSP 代碼來(lái)創(chuàng)建從某一 JSP 頁(yè)面到 Struts Receiver 頁(yè)面的鏈接:

<wps:urlGeneration contentNode="Struts_Receiver_Page">         <A HREF="<%wpsURL.write(out);%>"style="text-decoration:none" >         Any text</a></wps:urlGeneration>

<wps:URLGeneration attribute="value"/> portlet JSP 標(biāo)記屬于 engine.tld 標(biāo)記庫(kù),這一標(biāo)記庫(kù)是由門(mén)戶(hù)服務(wù)器引擎使用的。為了讓該門(mén)戶(hù) JSP 標(biāo)記可用于我們的 JSP 中,我們?cè)?JSP 頁(yè)面的最開(kāi)始位置添加標(biāo)記庫(kù)指示 taglib。如以下代碼所示,通過(guò)前綴 wps,我們樣本中所有的 engine.tld 標(biāo)記現(xiàn)在就都可用了:

<%@ taglib uri="/WEB-INF/tld/engine.tld" prefix="wps" %>

樣本頁(yè)面和 portlet 配置
該樣本應(yīng)用程序的頁(yè)面導(dǎo)航條包括三個(gè) portlet(這里提供的長(zhǎng)名稱(chēng)有助于強(qiáng)調(diào)頁(yè)面導(dǎo)航流程):

請(qǐng)記住,到目前為止所描述的全部任務(wù)均可用于常規(guī) portlet 或 Struts portlet 開(kāi)發(fā)。接下來(lái)我們將使用多 Struts 模塊中的門(mén)戶(hù) JSP 標(biāo)記來(lái)實(shí)現(xiàn)頁(yè)面導(dǎo)航。

在 Struts 中使用多模塊支持
Struts Version 1.1 可以讓我們將單個(gè) Struts 應(yīng)用程序拆分為多個(gè)模塊,每個(gè)模塊都有自己的操作、JSP 頁(yè)面和 Struts 配置文件(圖 6)。在 Struts 應(yīng)用程序中實(shí)現(xiàn)多 Struts 模塊需要以下幾個(gè)步驟:

  • 創(chuàng)建獨(dú)立的 Struts 配置文件以及每個(gè)應(yīng)用程序模塊的 Struts 操作和 JSPs。
  • 配置 Web 部署描述符(web.xml)。
  • 從一個(gè)模塊轉(zhuǎn)換到另一個(gè)模塊。

雖然 Struts 應(yīng)用程序很容易應(yīng)用,但要想在門(mén)戶(hù)環(huán)境中運(yùn)行 Struts 應(yīng)用程序的話(huà),您還需要執(zhí)行其他的步驟。(參見(jiàn)參考資料)。

圖 6. Struts 應(yīng)用程序中的多模塊支持

創(chuàng)建獨(dú)立的 Struts 模塊和文件
對(duì)于我們的樣本應(yīng)用程序,我們創(chuàng)建了四個(gè) Struts 模塊,以及它們自己的 Struts 配置文件、行為和 JSPs。這些 Struts 模塊是:

  • address
  • phone-numbers
  • overview
  • default.

我們也配置了 web.xml portlet.xml 文件,并使用 default 模塊執(zhí)行從一個(gè)模塊到另一個(gè)模塊的轉(zhuǎn)換。

接下來(lái),我們將會(huì)根據(jù)實(shí)現(xiàn)的需要講解我們的文件需要的改動(dòng)。

在 Struts 模塊中開(kāi)發(fā)頁(yè)面導(dǎo)航
我們?cè)谝韵氯齻€(gè)模塊中實(shí)現(xiàn)頁(yè)面導(dǎo)航:

  • overview
  • address
  • phone-numbers.

除了存在一些細(xì)微的差別以外,這些模塊中每一個(gè)的頁(yè)面導(dǎo)航開(kāi)發(fā)任務(wù)幾乎都是相同的。因此,我們將講解實(shí)現(xiàn) overview 模塊的頁(yè)面導(dǎo)航的任務(wù),然后再描述一下其他模塊的實(shí)現(xiàn)任務(wù)與此的差別。此外,我們還會(huì)講解特定于 Struts 模塊的開(kāi)發(fā)過(guò)程,該模塊是為 default 模塊而轉(zhuǎn)換的。在我們的實(shí)現(xiàn)中,default 模塊用于將控制權(quán)交給下一個(gè)適當(dāng)?shù)哪K;并不需要頁(yè)面導(dǎo)航。然而,由于它啟動(dòng)其他模塊來(lái)執(zhí)行模塊轉(zhuǎn)換并且是導(dǎo)航結(jié)構(gòu)的一個(gè)主要部分,所以我們這里也將它包括在內(nèi)。

在 Application Developer 中,我們創(chuàng)建一個(gè)支持 Struts Version 1.1 的 Web 項(xiàng)目,然后為開(kāi)發(fā)任務(wù)創(chuàng)建文件,如下面的表 1 所示。

表 1. 開(kāi)發(fā)構(gòu)件列表

以下是表 1 所示構(gòu)件的簡(jiǎn)要描述:

  1. JSP 文件:
    我們開(kāi)發(fā)了五個(gè) JSP 文件:
    • 用于 default 模塊的 index.jsp failure.jsp 文件;
    • 用于 address 模塊的 address.jsp 文件;
    • 用于 phone-numbers 模塊的 phone-numbers.jsp 文件;
    • 用于 overview 模塊的 overview.jsp 文件。
  2. 操作:
    我們?cè)?com.test.strutstest.actions 包中創(chuàng)建四個(gè) Struts 操作。它們的類(lèi)為:
    • DisplayAction
    • DisplayAddressInfoAction
    • DisplayPhoneInfoAction
    • OverviewAction.
  3. 表單 bean:
    我們?cè)?com.test.strutstest.forms 包中創(chuàng)建兩個(gè)表單 bean。它們的類(lèi)為:
    • UserFormBean
    • OverviewFormBean.
  4. 后端 bean 和模型類(lèi):
    我們?cè)诎惺褂靡粋€(gè)后端 bean 類(lèi)(UserBean )和一個(gè)模型類(lèi)(UserBeanHelper)。(后端 bean 包含存根數(shù)據(jù),并不與真正后端進(jìn)行通信。)
  5. Struts 配置文件:
    我們開(kāi)發(fā)了四個(gè) struts-config.xml 文件,每個(gè)模塊使用一個(gè):
    • 用于 default 模塊的 WEB-INF/struts-config.xml
    • 用于 address 模塊的 WEB-INF/address/struts-config.xml
    • 用于 phone-numbers 模塊的 WEB-INF/phone-numbers/struts-config.xml
    • 用于 overview 模塊的 WEB-INF/overview/struts-config.xml。
  6. 其他配置文件:
    在將 Struts 應(yīng)用程序作為 portlet 進(jìn)行部署時(shí)需要修改 web.xml portlet.xml 文件。

以上的每一個(gè)配置文件都包含下列請(qǐng)求處理器(Request Processor):

<controller    processorClass="com.ibm.wps.portlets.struts.WpsRequestProcessor" >

圖 7 顯示了在 Application Developer 開(kāi)發(fā)環(huán)境中開(kāi)發(fā)構(gòu)件的位置:

圖 7. WebSphere Studio Application Developer 中的開(kāi)發(fā)構(gòu)件的位置

配置 default 模塊
要想啟動(dòng) default 模塊并查看它如何在 Struts 模塊之間進(jìn)行轉(zhuǎn)換,需要執(zhí)行以下步驟:

  1. Default 模塊是在 WebSphere Portal 調(diào)用 index.jsp 文件時(shí)啟動(dòng)的,這是在 web.xml 文件中的 <welcome-file-list> 標(biāo)記中指定的:

    <welcome-file-list>     <welcome-file>index.jsp</welcome-file></welcome-file-list>

  2. 調(diào)用 index.jsp 時(shí),在 logic Struts 標(biāo)記中指定邏輯轉(zhuǎn)發(fā)名 Display

    <logic:forward name="Display"/>

  3. default 模塊的 struts-config.xml 文件中的邏輯 forward name(在此為 Display)定義為全局轉(zhuǎn)發(fā):

    <global-forwards>     <forward name="Display"    path="/display.do"/></global-forwards>

  4. <global-forwards> 部分中,使邏輯全局轉(zhuǎn)發(fā)上下文關(guān)系路徑 path="/ display.do" <action-mappings> 部分中的操作元素的上下文關(guān)系路徑 path="/display" 路徑相匹配。這一匹配可以啟動(dòng) DisplayAction 操作。操作映射部分(包括帶有 path type 屬性的 <action> 元素)如下所示:

    <action-mappings>    <action path="/display"           type="com.test.strutstest.actions.DisplayAction">               .................................................    </action></action-mappings>

為了啟用模塊轉(zhuǎn)換,請(qǐng)為 remaining 模塊配置 default 模塊的 struts-config.xml、portlet.xml config.xml 文件:

  1. 配置 default 模塊的 struts-config.xml 文件。我們使用 DisplayAction 作為我們的操作類(lèi)和四個(gè)邏輯轉(zhuǎn)發(fā):

    <action-mappings>     <action path="/display"          type="com.test.strutstest.actions.DisplayAction">               <forward name="failure"                    contextRelative="true"                    path="/failure.jsp"/>               <forward name="address"                    contextRelative="true"                    path="/address/start.do"/>               <forward name="phone-numbers"                    contextRelative="true"                    path="/phone-numbers/start.do"/>               <forward name="overview"                    contextRelative="true"                    path="/overview/start.do"/>     </action></action-mappings>

  2. 配置 portlet.xml 文件,使之符合 default 模塊的 struts-config.xml 文件中的配置。特別是,在 default 模塊的 struts-config.xml 文件中的四個(gè)邏輯轉(zhuǎn)發(fā)名稱(chēng)中的每一個(gè)均要與在 portlet.xml 文件中設(shè)置的 view.forward 配置參數(shù)值相匹配。表 2 顯示了這一映射關(guān)系:

    表 2. view.forward 配置值對(duì)轉(zhuǎn)發(fā)名稱(chēng)配置值

  3. 配置 web.xml 文件來(lái)定義不同的模塊。我們使用 config 初始化參數(shù)來(lái)將我們的 default 模塊告知操作 servlet;然而,對(duì)于其他的每個(gè)模塊,我們列出了一個(gè)名為 config/module 的初始化參數(shù),其中 module 是我們的模塊名稱(chēng)。例如:
    • 可以這樣定義 default 模塊:

      <init-param>     <param-name>config</param-name>     <param-value>WEB-INF/struts-config.xml</param-value></init-param>

    • 可以這樣定義其他模塊:

      <init-param>     <param-name>config/address</param-name>     <param-value>WEB-INF/address/struts-config.xml     </param-value></init-param><init-param>     <param-name>config/phone-numbers</param-name>     <param-value>WEB-INF/phone-numbers/struts-config.xml     </param-value></init-param><init-param>     <param-name>config/overview</param-name>     <param-value>WEB-INF/overview/struts-config.xml      </param-value></init-param>

    (其他模塊配置和必要的 web.xml 配置設(shè)置請(qǐng)參見(jiàn)參考資料。)

  4. 對(duì) web.xml portlet.xml 文件執(zhí)行標(biāo)準(zhǔn)更新來(lái)將 Struts 應(yīng)用程序作為 portlet 進(jìn)行部署。(要獲得更多信息請(qǐng)參見(jiàn)參考資料下載部分的樣本 web.xmlportlet.xml 文件。)

正如 default 模塊的 struts-config.xml 文件中的 <action-mapping> 部分所配置的,模塊轉(zhuǎn)換是在 DisplayAction 類(lèi)中進(jìn)行的。要想確定 WebSphere Portal 調(diào)用的是哪個(gè)模塊,可以執(zhí)行以下的步驟:

  1. 調(diào)用 DisplayAction 類(lèi)的 execute() 方法時(shí),訪問(wèn)的是在 portlet.xml 文件中設(shè)置的 view.forward 參數(shù):

    PortletSettings portletSettings = request.getPortletSettings();String viewForward = portletSettings.getAttribute("view.forward");

  2. 對(duì)于我們的 portlet 來(lái)說(shuō),view.forward 參數(shù)會(huì)有以下的值:

    表 3. 樣本 portlet 的 view.forward 配置參數(shù)的值

    • 如果 viewForward 為空,那么在 execute() 方法中會(huì)將這一變量設(shè)置為 failure。
    • 已配置的 viewForward 值的轉(zhuǎn)發(fā)映射是從 struts-config.xml 文件檢索的:

      ActionForward forward = new ActionForward();try{     forward = mapping.findForward(forwardName);}catch (Exception e){      ...........................................}

    • execute() 方法中的最后步驟返回 ActionForward(forward)的實(shí)例:

      return (forward);

配置其他 struts-config.xml 文件。根據(jù) DisplayAction 類(lèi)中的模塊確定結(jié)果,如果 view.forward 參數(shù)值為:

  1. address:

    default 模塊的 struts-config.xml 文件的 <action-mappings> 部分中匹配的 start 路徑會(huì)使 DisplayAddressInfoAction 在 address 模塊中調(diào)用。根據(jù) web.xml 中的配置,這一過(guò)程需要使用到 address/struts-config.xml 文件。address/struts-config.xml 文件包含以下的設(shè)置:

    <!-- ===== Global Forward Definitions ===== --><global-forwards>     <forward name="start" path="/start.do"/></global-forwards><!-- ===== Action Mapping Definitions ===== --><action-mappings>     <action  path="/start"               type="com.test.strutstest.actions.DisplayAddressInfoAction"               name="userFormBean"               scope="request">          <forward name="success" path="/address.jsp"/>     </action</action-mappings>

  2. phone-numbers:

    default 模塊的 struts-config.xml 文件的 <action-mappings> 部分中匹配的 start 路徑會(huì)使 DisplayPhoneInfoAction 在 phone-numbers 模塊中調(diào)用。根據(jù) web.xml 文件中的配置,這一過(guò)程需要使用到 phone-numbers/struts-config.xml 文件。phone-numbers/struts-config.xml 文件包含以下的設(shè)置:

    <!-- ===== Global Forward Definitions ===== --><global-forwards>     <forward name="start" path="/start.do"/></global-forwards><!-- ===== Action Mapping Definitions ===== --><action-mappings>     <action  path="/start"          type="com.test.strutstest.actions.DisplayPhoneInfoAction"         name="userFormBean"         scope="request">         <forward name="success" path="/phone-numbers.jsp"/>     </action</action-mappings>

  3. overview:

    default 模塊的 struts-config.xml 文件的 <action-mappings> 部分中匹配的 start 路徑會(huì)使 OverviewAction 在 overview 模塊中調(diào)用。根據(jù) web.xml 文件中的配置,這一過(guò)程需要使用到 overview/struts-config.xml 文件。overview/struts-config.xml 包含以下的設(shè)置:

    <!-- ===== Global Forward Definitions ===== --><global-forwards>     <forward name="start" path="/start.do"/></global-forwards><!-- ===== Action Mapping Definitions ===== --><action-mappings>     <action  path="/start"          type="com.test.strutstest.actions.OverviewAction"          name="overviewFormBean"          scope="request">          <forward name="success" path="/Overview.jsp"/>     </action></action-mappings>

  4. failure:

    根據(jù) default 模塊的 struts-config.xml 文件中的配置,這種參數(shù)值下會(huì)啟動(dòng) failure.jsp。

到目前為止,我們已經(jīng)創(chuàng)建了表 1 中所列出的文件,并根據(jù)我們的示例需要,對(duì)其中的大部分做了修改?,F(xiàn)在我們就可以開(kāi)始編寫(xiě)代碼來(lái)實(shí)現(xiàn)使用 overview 模塊的頁(yè)面導(dǎo)航。以下部分將通過(guò)具體步驟指導(dǎo)您完成這一過(guò)程。

開(kāi)發(fā) overview 模塊
要想生成 Overview.jsp 文件、OverviewAction 類(lèi)、OverviewFormBean 類(lèi)和 overview/struts-config.xml 文件來(lái)開(kāi)發(fā) Overview Struts portlet,請(qǐng)?jiān)诓僮黝?lèi)和 JSP 文件中遵循這些開(kāi)發(fā)任務(wù):

  1. 一旦控制權(quán)從 default 模塊轉(zhuǎn)移到 Overview 模塊,OverviewAction 類(lèi)中的 execute() 方法會(huì)執(zhí)行以下這些任務(wù):
    • 訪問(wèn) OverviewFormBean 表單 bean 并設(shè)置以下屬性:

      try{String forwardName = null;if (form == null){     form = (ActionForm) request.getAttribute("overviewFormBean");}//Set-up form bean fieldsOverviewFormBean formBean = (OverviewFormBean) form;formBean.setPhoneNumbersLinkName("List Phone Numbers");formBean.setAddressLinkName("Address Information");...................................................

    • 在正確的作用域內(nèi)存儲(chǔ)該表單 bean:

      try{     //Store the bean in the correct scope     if ("request".equals(mapping.getScope()))             request.setAttribute(mapping.getName(), formBean);     else             session.setAttribute(mapping.getName(), formBean);}catch (Exception e){             ..................................}

    • overview/struts-config.xml 中查找映射并返回一個(gè) ActionForward 類(lèi)型的對(duì)象:

      String forwardName = null;ActionForward forward = new ActionForward();.......................................//If no errors occur then look for "success"try{     forward = mapping.findForward(forwardName);     if (forward != null)     {     .....................................     }else     .....................................}catch(Exception e){     ...................................}return (forward);

    • 如果在操作類(lèi)的處理過(guò)程中沒(méi)有出現(xiàn)錯(cuò)誤,那么根據(jù)我們?cè)?overview/struts-config.xml 文件中的配置,轉(zhuǎn)發(fā)名稱(chēng) success 會(huì)允許啟動(dòng) Overview.jsp。
  2. Overview.jsp 顯示兩個(gè)鏈接,指向已開(kāi)發(fā)的其他 portlet——Receive Phone Numbers Request Struts Portlet 和 Receive Address Request Struts Portlet。我們使用頁(yè)面導(dǎo)航方法和 Struts 標(biāo)記來(lái)實(shí)現(xiàn)這一特征:
    • 在 JSP 頁(yè)面的最開(kāi)始的地方使用 taglib 指示來(lái)使所有的 engine.tld 標(biāo)記可用于剩余的帶有 prefix.wps 的 JSP 頁(yè)面。

      <%@ taglib uri="/WEB-INF/tld/engine.tld" prefix="wps" %>

    • <wps:urlGeneration> portlet 標(biāo)記中使用 contentNode 參數(shù)來(lái)指定駐留其他 portlet 的頁(yè)面的惟一標(biāo)識(shí)符或自定義名稱(chēng)。為了啟動(dòng)到 Receive Address Request Struts Portlet(位于 Struts_Receiver 頁(yè)面)的頁(yè)面導(dǎo)航,我們使用了自定義名稱(chēng) Struts_Receiver_Page

      <wps:urlGeneration contentNode="Struts_Receiver_Page">     <A HREF="<%wpsURL.write(out);%>"style="text-decoration:none" >     <bean:write name="overviewFormBean" property="addressLinkName" /></a></wps:urlGeneration>

    • 為了啟動(dòng)到 Receive Phone Numbers Request Struts Portlet(位于 Struts_Receiver_2 頁(yè)面)的頁(yè)面導(dǎo)航,我們使用自定義名稱(chēng) Struts_Receiver_2_Page

      <wps:urlGeneration contentNode="Struts_Receiver_2_Page">     <A HREF="<%wpsURL.write(out);%>"style="text-decoration:none" >     <bean:write name="overviewFormBean"     property="phoneNumbersLinkName" /></a></wps:urlGeneration>

    • 這樣我們就從 My Pages 和惟一名稱(chēng)列表獲得了頁(yè)面的自定義名稱(chēng),如圖 2 所示。
  3. overview 模塊中,我們使用 <bean:write><html:html> <html:form> Struts 標(biāo)記。實(shí)現(xiàn)這些標(biāo)記需要以下的步驟:
    • 聲明 html bean 前綴:

      <%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %><%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean" %>

    • <html:html> Struts 標(biāo)記:如果在用戶(hù)會(huì)話(huà)中有可用的當(dāng)前地點(diǎn),就會(huì)以適當(dāng)?shù)恼Z(yǔ)言屬性來(lái)呈現(xiàn) HTML 元素。
    • <html:form> Struts 標(biāo)記:用于在 Struts 中的所有 HTML 表單處理。form 元素必須始終包含 action 屬性。action 屬性必須符合 struts-config.xml 中的有效操作。在 Overview.jsp 文件中,我們使用 form 元素和它的 action 屬性:

      <html:form action="/start">

      start 屬性映射 overview/struts-config.xml 文件中的下列操作:

      <action-mappings>     <action  path="/start"          type="com.test.strutstest.actions.OverviewAction"          name="overviewFormBean"          scope="request">     <forward name="success" path="/Overview.jsp"/>     </action></action-mappings>

      Struts 標(biāo)記將表單字段和 Struts 中的表單 bean 連結(jié)在一起。根據(jù)用于相關(guān)聯(lián)的 ActionMapping 的表單 bean 規(guī)范定位(或生成,如果有必要)表單 bean。我們?cè)?overview/struts-config.xml 文件中定義的表單 bean 為 UserFormBean

      <form-beans>     <form-bean  name="overviewFormBean" type="com.test.strutstest.forms.OverviewFormBean"/>     </form-beans>

    • <bean:write> Struts 標(biāo)記的使用:

      這一通用標(biāo)記用于從 bean 輸出特性值。在 Overview.jsp 文件中,它顯示 <bean:write> 來(lái)顯示在 UserFormBean 表單 bean 中設(shè)置的文本數(shù)據(jù)。我們使用這一標(biāo)記來(lái)顯示 UserFormBean 的某些特性,如下所示:

      <bean:write name="overviewFormBean" property="addressLinkName" /><bean:write name="overviewFormBean" property="phoneNumbersLinkName" />

開(kāi)發(fā)其余的模塊
開(kāi)發(fā) addressphone-numbers 模塊與開(kāi)發(fā) overview 模塊非常類(lèi)似,不同之處在于:

  • address 模塊實(shí)現(xiàn) Receive Address Request Struts Portlet 使用的是:
    • address.jsp
    • DisplayAddressInfoAction class
    • UserFormBean form bean class
    • UserBean backend bean class
    • UserBeanHelper model class
    • address/struts-config.xml file.
  • phone-numbers 模塊實(shí)現(xiàn) Receive Phone Numbers Request Struts Portlet 使用的是:
    • phone-numbers.jsp
    • DisplayPhoneInfoAction class
    • UserFormBean form bean class
    • UserBean backend bean class
    • UserBeanHelper model class
    • phone-numbers/struts-config.xml.

對(duì)于 addressphone-numbers 模塊,我們使用的都是后端 UserBean bean 類(lèi)和 UserBeanHelper 模型類(lèi),這兩個(gè)類(lèi)都需要使用存根數(shù)據(jù)來(lái)模擬用戶(hù)信息,而存根數(shù)據(jù)是使用我們的模塊類(lèi)在后端 bean 中設(shè)置的。這兩個(gè)模塊都使用同樣的表單 bean。

要在 DisplayAddressInfoAction 類(lèi)中開(kāi)發(fā) address 模塊需要做的是:

一旦控制權(quán)從 default 模塊轉(zhuǎn)移到 address 模塊,DisplayAddressInfoAction 類(lèi)的 execute() 方法就會(huì)執(zhí)行以下任務(wù):

  1. 訪問(wèn)表單 bean——UserFormBean,并設(shè)置以下屬性:

    try{     String forwardName = null;if (form == null){          form = (ActionForm) request.getAttribute("userFormBean");}     //Set-up form bean fields     UserFormBean formBean = (UserFormBean) form;     setFormBean(formBean);     ...................................................

  2. 在正確的作用域中存儲(chǔ)該表單 bean:

    try{     ........................................     //Store the bean in the correct scope     if ("request".equals(mapping.getScope()))          request.setAttribute(mapping.getName(), formBean);     else          session.setAttribute(mapping.getName(), formBean);}catch (Exception e){     ..................................}

  3. address/struts-config.xml
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
blogjava - hexuzhong-利用myeclipse快速開(kāi)發(fā)struts應(yīng)用程序
Struts在Tomcat中的安裝配置及工作流程
struts常見(jiàn)異常信息和解決方法
Struts開(kāi)發(fā)技巧
Liferay簡(jiǎn)單Struts Portlet開(kāi)發(fā)
liferay 中 開(kāi)發(fā)簡(jiǎn)單struts portlet
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服