Struts快速入門(四)

使用ActionForward導航<o:p></o:p>

       ActionForward對象是配置對象。這些配置對象擁有獨一無二的標識以允許它們按照有意義的名稱如“success”,“failure”等來檢索。ActionForward對象封裝了向前進的URL路徑且被請求處理器用於識別目標視圖。ActionForward對象建立自<forward>元素位於struts-config.xml。下面是一個Struts<forward>元素例子,屬於<action>元素範圍。<o:p></o:p>

<action path="/editCustomerProfile"<o:p></o:p>

type="packageName.EditCustomerProfileAction"<o:p></o:p>

name="customerProfileForm" scope="request"><o:p></o:p>

<forward name="success" path="/MainMenu.jsp"/><o:p></o:p>

<forward name="failure" path="/CustomerService.jsp"/><o:p></o:p>

</action><o:p></o:p>

       基於執行請求處理器的execute(…)方法的結果,當傳遞一個值匹配指定於<forward>元素中name屬性的值的時候,下一個視圖可以在execute(…)方法中被開發者用方便的方法org.apache.struts.action.ActionMapping.findForward(…)選擇。ActionMapping.findForward(…)方法既從它的本地範圍又從全局範圍提供一個ActionForward對象,該對象返回至RequestProcessorRequestDispatcher.forward(…)response.sendRedirect(…)調用下一個視圖。當<forward>元素有redirect=false屬性或redirect屬性不存在的時候,RequestDispatcher.forward(…)被執行;當redirect=“true”是,將調用sendRedirect(…)方法。下例舉例說明了redirect屬性的用法:<o:p></o:p>

      <forward name="success" path="/Catalog.jsp" redirect="true"/><o:p></o:p>

struts-config.xml<controller>元素還提供另一個特性以控制<forward>元素的的name屬性如何被解釋。該<controller>元素用於聯合<action>元素中input屬性,如下所示:<o:p></o:p>

<action path="/editCustomerProfile" <o:p></o:p>

type="packageName.EditCustomerProfileAction"<o:p></o:p>

name="customerProfileForm"<o:p></o:p>

scope="request"<o:p></o:p>

input="profile"><o:p></o:p>

<forward name="profile" path="/CustomerProfile.jsp"/><o:p></o:p>

<forward name="success" path="/MainMenu.jsp"/><o:p></o:p>

</action><o:p></o:p>

<controller><o:p></o:p>

<set-property property="inputForward" value="true"/><o:p></o:p>

</controller><o:p></o:p>

       上述的<action>元素包含一個input屬性及一個向前名稱;該前進名稱與<forward>中的相同。在上述的<controller>配置中,當ActionForm.validate(…)返回一個非空或非nullActionErrors對象,RequestProcessor將選擇<forward>元素,其name屬性與<action>元素的input屬性擁有相同的值;除非用子類取代RequestProcessor,該行爲是確認遇到錯誤的標準行爲。對下面的<controller>元素聲明,當ActionForm.validate(…)返回一個非空或非nullActionErrors對象,input屬性提供一個向前的URL以代替向前發生ActionForward的名稱。在inputForward屬性不存在時,這是默認的配置。<o:p></o:p>

<controller><o:p></o:p>

<set-property property="inputForward" value="false"/><o:p></o:p>

</controller><o:p></o:p>

       前進指向特定的路徑,如果路徑中沒有”/” 就加上。對於前進或重定向,Struts中的URL在內部被RequestProcessor用下面的結構建立。<o:p></o:p>

如果redirect=true, URL建立如/contextPath/path因爲HttpServletResponse.sendRedirect(…)中解釋URL採用”/”開頭相對於servlet容器根目錄。<o:p></o:p>

如果redirect=false, URI建立如/path因爲ServletContext.getRequestDisptacher(…)採用虛擬目錄相關URL<o:p></o:p>

<o:p> </o:p>

捕獲表單數據<o:p></o:p>

       JSP規範提供了一個標準方法以在請求時從JavaBean提取和保存表單數據,使用<jsp:useBean><jsp:setProperty>。然而這種方法導致了在表示層和JavaBeans間產生很強的耦合;此外HTML文檔創作者不得不明白這種組件並且知道它們在頁面中正確地用法。因爲JavaBean可以被<jsp:useBean>標籤或被另一個服務器組件建立和放置在指定的範圍,那樣可能在不同的組件共享JavaBean中產生bean的生命週期管理問題。Struts提供一個機制以提取,保存和驗證表單數據;同時它克服了<jsp:useBean><jsp:setProperty>的缺點。下面是一對新的<action><form-bean>元素。<o:p></o:p>

<form-bean name="customerProfileForm" type="packageName.customerProfileForm"/><o:p></o:p>

 <action path="/editCustomerProfile" type="packageName.EditCustomerProfileAction" name="customerProfileForm" scope="request"/> <o:p></o:p>

       上述例子映射一個packageName.customerProfileForm類型JavaBeanname = customerProfileForm(唯一標識)到一個<action>元素的name = customerProfileForm;請求處理器被提交請求的路徑/editCustomerProfile唯一標識。該表單建立和使用的語義用下面的靜態模型舉例說明:

 

   圖略

<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><o:p></o:p>

 

首先,我們將瀏覽這些表單處理語義直到使用簡單JavaBeans對象。這些對象作爲ActionForm對象被實現。我們隨後將討論使用DynaActionForm對象進行表單處理,可以在請求時支持屬性的動態集合。

 

<o:p>冰雲翻譯,轉載請告知。</o:p>

<o:p>[email protected]</o:p>

<o:p></o:p>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章