午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

【使用 struts portlet 在門戶應(yīng)用程序中實(shí)現(xiàn)頁面導(dǎo)航】

 smoking_boy 2005-08-24
網(wǎng)站目錄: 網(wǎng)站首頁 —> Java
轉(zhuǎn)載自:www.csdn.net


引言
Struts 是一個(gè)很受歡迎的開放源代碼平臺(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)。為了能夠在門戶應(yīng)用程序中實(shí)現(xiàn)頁面導(dǎo)航,WebSphere? Portal V5 提供了一些標(biāo)記,在開發(fā)典型 portlet 和 Struts portlet 時(shí)可將這些標(biāo)記用于 JavaServer Pages(JSP)。本文重點(diǎn)討論 Struts 框架創(chuàng)建多模塊的能力,并通過一個(gè)樣本 Struts portlet 應(yīng)用程序?yàn)槟榻B如何采用 JSP 實(shí)現(xiàn)頁面導(dǎo)航方法。

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

  • 如何使用在 WebSphere Portal 中可用的某一 JSP 標(biāo)記來從 JSP 實(shí)現(xiàn)頁面導(dǎo)航
    我們將會(huì)看到一個(gè)樣本應(yīng)用程序,包括開發(fā)環(huán)境和門戶資源的屏幕快照,以及頁面導(dǎo)航方法的代碼樣本。
  • 如何使用 Struts portlet 框架中內(nèi)置的多模塊支持來組織 Web 導(dǎo)航方案
    我們將會(huì)看到一些代碼樣本,它們闡述了如何使用頁面導(dǎo)航特征來執(zhí)行在門戶環(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 中的門戶資源。(要獲得這些方面的更多信息,請(qǐng)參見參考資料。)

在開發(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 (下面稱為 Application Developer)。

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

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

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

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

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

  • Struts_Test
  • Struts_Receiver
  • Struts_Receiver_2

圖 2. Custom Unique Names portlet
圖 2. Custom Unique Names portlet

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

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


<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)記庫,這一標(biāo)記庫是由門戶服務(wù)器引擎使用的。為了讓該門戶 JSP 標(biāo)記可用于我們的 JSP 中,我們?cè)?JSP 頁面的最開始位置添加標(biāo)記庫指示 taglib。如以下代碼所示,通過前綴 wps,我們樣本中所有的 engine.tld 標(biāo)記現(xiàn)在就都可用了:


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

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

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

在 Struts 中使用多模塊支持
Struts Version 1.1 可以讓我們將單個(gè) Struts 應(yīng)用程序拆分為多個(gè)模塊,每個(gè)模塊都有自己的操作、JSP 頁面和 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)用,但要想在門戶環(huán)境中運(yùn)行 Struts 應(yīng)用程序的話,您還需要執(zhí)行其他的步驟。(參見參考資料)。

圖 6. Struts 應(yīng)用程序中的多模塊支持
圖 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)換。

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

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

  • overview
  • address
  • phone-numbers.

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

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

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

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

  1. JSP 文件:
    我們開發(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 操作。它們的類為:
    • DisplayAction
    • DisplayAddressInfoAction
    • DisplayPhoneInfoAction
    • OverviewAction.
  3. 表單 bean:
    我們?cè)?com.test.strutstest.forms 包中創(chuàng)建兩個(gè)表單 bean。它們的類為:
    • UserFormBean
    • OverviewFormBean.
  4. 后端 bean 和模型類:
    我們?cè)诎惺褂靡粋€(gè)后端 bean 類(UserBean )和一個(gè)模型類(UserBeanHelper)。(后端 bean 包含存根數(shù)據(jù),并不與真正后端進(jìn)行通信。)
  5. Struts 配置文件:
    我們開發(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 開發(fā)環(huán)境中開發(fā)構(gòu)件的位置:

圖 7. WebSphere Studio Application Developer 中的開發(fā)構(gòu)件的位置
圖 7. WebSphere Studio Application Developer 中的開發(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 作為我們的操作類和四個(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ā)名稱中的每一個(gè)均要與在 portlet.xml 文件中設(shè)置的 view.forward 配置參數(shù)值相匹配。表 2 顯示了這一映射關(guān)系:

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

  3. 配置 web.xml 文件來定義不同的模塊。我們使用 config 初始化參數(shù)來將我們的 default 模塊告知操作 servlet;然而,對(duì)于其他的每個(gè)模塊,我們列出了一個(gè)名為 config/module 的初始化參數(shù),其中 module 是我們的模塊名稱。例如:
    • 可以這樣定義 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)參見參考資料。)

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

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

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

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

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

    表 3. 樣本 portlet 的 view.forward 配置參數(shù)的值
    表 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 類中的模塊確定結(jié)果,如果 view.forward 參數(shù)值為:

  1. address:

    default 模塊的 struts-config.xml 文件的 <action-mappings> 部分中匹配的 start 路徑會(huì)使 DisplayAddressInfoAction 在 address 模塊中調(diào)用。根據(jù) web.xml 中的配置,這一過程需要使用到 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 文件中的配置,這一過程需要使用到 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 文件中的配置,這一過程需要使用到 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ì)其中的大部分做了修改。現(xiàn)在我們就可以開始編寫代碼來實(shí)現(xiàn)使用 overview 模塊的頁面導(dǎo)航。以下部分將通過具體步驟指導(dǎo)您完成這一過程。

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

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

      
      try
      {
      String forwardName = null;
      if (form == null)
      {
           form = (ActionForm) request.getAttribute("overviewFormBean");
      }
      //Set-up form bean fields
      OverviewFormBean 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 類型的對(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);

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

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

    • <wps:urlGeneration> portlet 標(biāo)記中使用 contentNode 參數(shù)來指定駐留其他 portlet 的頁面的惟一標(biāo)識(shí)符或自定義名稱。為了啟動(dòng)到 Receive Address Request Struts Portlet(位于 Struts_Receiver 頁面)的頁面導(dǎo)航,我們使用了自定義名稱 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 頁面)的頁面導(dǎo)航,我們使用自定義名稱 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 和惟一名稱列表獲得了頁面的自定義名稱,如圖 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)記:如果在用戶會(huì)話中有可用的當(dāng)前地點(diǎn),就會(huì)以適當(dāng)?shù)恼Z言屬性來呈現(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> 來顯示在 UserFormBean 表單 bean 中設(shè)置的文本數(shù)據(jù)。我們使用這一標(biāo)記來顯示 UserFormBean 的某些特性,如下所示:

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

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

  • 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 類和 UserBeanHelper 模型類,這兩個(gè)類都需要使用存根數(shù)據(jù)來模擬用戶信息,而存根數(shù)據(jù)是使用我們的模塊類在后端 bean 中設(shè)置的。這兩個(gè)模塊都使用同樣的表單 bean。

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

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

  1. 訪問表單 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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多