Struts快速入門(五完)

FormTag初始化ActionForm對象<o:p></o:p>

       本節早前提到,HTML表單中動作URL被映射到一個<action>配置,並輪流被映射到一個<form-bean>配置。FormTag中由action屬性制定的URLFormTag轉換爲一個在部署描述符中<url-pattern>確定的路徑結構URL。對於擴充的映射,這意味着資源擴展和<url-pattern>指定的一樣。因此,一個表單URL editCustomerProfile?customerType=preferred被轉換爲/editCustomerProfile.do?customerType=preferredFormTag調用RequestUtils.createActionForm(…)方法,查找一個ActionFormBean配置對象(ActionFormBean <formbean>元素的運行時表現),其名稱匹配指定的相應<action>的名稱。一個新的ActionForm實例使用<form-bean>元素type屬性被建立;當ActionForm實例在指定的活動範圍內未找到時,一個新的實例被建立,否則FormTag調用已存在的表單beanActionForm.reset(…)方法以清除並準備接受下一個請求的表單數據。該活動範圍被<action>元素中scope屬性所指定;新ActionForm實例或已存在的重新初始化的實例被使用name屬性保存在指定的活動範圍內<o:p></o:p>

<o:p> </o:p>

ActionForm保存表單數據<o:p></o:p>

       ActionForm派生的對象用於保存請求對象的參數,因此它們和用戶緊密聯繫。一個ActionForm的子類是一個擁有存取HttpServletRequest對象參數屬性的方法JavaBean。如果ActionForm對象被FormTag建立,那麼在後來的FormTag表單翻譯請求中,RequestProcessor將從制定的活動範圍訪問表單;欲取得的表單被相關的動作映射所標識。RequestProcessor將隨後重新安排表單屬性,用請求時參數填充表單,隨即調用表單對象的validate(…)方法以履行服務器端用戶輸入驗證。僅當ActionMapping對象中validate屬性被設爲true時,validate(…)方法被調用;這就是默認的行爲。request.getParameterValues(parameterName)被用於得到一個String[]對象,它用來表單填充;驗證的結果應該是一個ActionErrors對象,用org.apache.struts.taglib.html.ErrorsTag來顯示驗證錯誤給用戶。ActionForm也可以被用於爲當前用戶保存即將被一個視圖引用的中間模型狀態。<o:p></o:p>

<o:p> </o:p>

       一個ActionForm類也可以被RequestProcessor建立。這是發生在已完成向前進到一個URL,該URL爲映射到控制器servlet而不是JSP和相應的動作映射指定的表單屬性的。在這個情況下,如果沒有在指定的活動範圍內找到,RequestProcessor將嘗試尋找可能導致創建一個新ActionForm對象的表單bean。該ActionForm對象在指定的活動範圍內被用<action>元素的name屬性找到;當一個表單對象被RequestProcessor找到,它被傳遞到請求處理器的execute(…)方法。一個ActionForm對象也可以被請求處理器建立。表單對象建立目的是提供中間模型狀態給使用請求範圍JSP;這將確保對象不會在有效性過期後仍然存在。默認的,所有的表單都被保存爲會話範圍。會話中表單對象脫離有效性的存在可能導致浪費內存,同樣的,請求處理器必須跟蹤保存在會話中的表單對象的生命週期。一個好的捕獲表單數據的實踐是爲橫跨多用戶交互的相關表單用一個單獨的表單bean表單bean也可以在反饋的時候用來儲存能夠被自定義標籤改變的中間模型狀態。在視圖中標籤用法避免結合Java代碼,因此要成一個好的任務劃分,web生產組主要處理標誌,而應用開發組主要處理Java代碼。標籤因素退出訪問中間模型狀態的邏輯;當訪問嵌套的對象或當通過聚集列舉時這個邏輯可能很複雜。<o:p></o:p>

<o:p> </o:p>

用動態屬性建立ActionForm<o:p></o:p>

       一個DynaActionForm對象是一個擁有動態屬性集合的對象。DynaActionForm擴展了ActionForm,它的用法允許通過在struts-config.xml聲明建立一個表單對象,如下:<o:p></o:p>

<form-bean name="logonForm"<o:p></o:p>

type="org.apache.struts.action.DynaActionForm"><o:p></o:p>

<form-property name="username" type="java.lang.String"/><o:p></o:p>

<form-property name="password" type="java.lang.String"/><o:p></o:p>

</form-bean><o:p></o:p>

    RequestProcessor用和ActionForm相同的方式建立、填充並驗證了DynaActionForm,例如,請求對象的參數被以<form-bean>元素中特定的動態屬性填充到DynaActionForm;其他的參數簡單類似。<o:p></o:p>

<o:p> </o:p>

總結<o:p></o:p>

       爲一個基於請求/響應的HTTP協議實現MVC語義(semantics)需要付出重大的時間和努力。選擇一個合適的架構以解決該問題提供一個領先的項目,允許架構師和開發者關注於事務語義而不是整合語義。Struts也提供充足的模型如Struts Validator以聲明表單驗證,Tiles以聚集合成視圖;這些模型增強了架構而且大大簡化了設計和開發一個應用的任務。Struts更多的信息和相關配置及安裝的說明可以在http://jakarta.apache.org/struts/userGuide/index.html找到。因爲Struts開發是一個正在進行的開發,或許就在你讀這篇文章的時候,一些實現也會更改,因此,最好的是用發佈於http://jakarta.apache.org/struts版本說明和更新來補足這章的內容。<o:p></o:p>

<o:p> </o:p>

參考<o:p></o:p>

[Core] Core J2EE Patterns by Deepak Alur et. al. (Prentice Hall, 2001)<o:p></o:p>

[Gof] Design Patterns by Erich Gamma et. al. (Addison-Wesley, 1995)

 

完, 頭一次翻譯,也是爲了應付考試呀~

<o:p>翻得不好,大家見諒~</o:p>

<o:p></o:p> 

<o:p><o:p> 

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

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

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

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