DynaActionForm
DynaActionForm提供了一個方便的機制,從根本上消除了編寫ActionForm的需要。 DynaActionForm可答應動態的表單屬性。這意味著你能夠在你的struts-config.xml檔案中定義屬性並且將表單類型設定為org.apache.struts.action.DynaActionForm。什麼都不需要寫。 DynaActionForm使用Apache公共專案中的DynaBean完成這些動作。這動態的行為是透過反射(reflection)與哈希圖(Hashmaps)提供的。
DynaActionForm是在struts-config.xml檔案中使用與標記定義的,如下所示:
〜〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜〜 〜 〜〜 〜 〜、、〜、〜、、、〜都〜
動態表單的屬性與標準的ActionForm的屬性類似。屬性name是用於索引Action中的表單bean,且type用於指定實例化的類別。當使用類別DynaActionForm時,的動態屬性會自動預設為真(true)。對於DynaActionForm,若要用元素指定表單的所有屬性。元素中的name是指屬性名稱。 type是指bean屬性用java的實作類別的類別名稱。假如這個屬性是索引類型的,可在type後面加上「[ ]」。在上表中,你應該注重最後一個屬性genre的定義,我們設定了初始值(或叫 預設值)為「Dance」。這個值也會在DynaActionForm中reset()方法被呼叫時被當作預設值設置,並答應在表單中設定預設值的機制。假如在initial屬性中沒有指定任何值,那麼所有原始類型的初值被設定為0,假如是物件則初值為null(空)。
使用DynaActionForm非常方便,主要的一個好處就是你只需寫出非常少的程式碼。就像其他表單一樣,前面的程式碼範例是使用表單所需的全部程式碼。需要知道的一件事就是驗證。當使用DynaActionForm時,假設在某處進行了驗證處理,這與ActionForm有些不同。你可以在自己的Action中實現驗證,但這是一個更好的方法。
進行驗證,可用DynaValidatorForm或DynaValidatorActionForm,兩個類別都在org.apache.struts.validator package套件中。透過擴充DynaActionForm,可以得到基於XML檔案的基本值域的驗證。驗證是基於輸入驗證器的key。 Key是來自於struts-config.xml檔的name屬性。它應與validation.xml檔案中的表單元素的name屬性相符。
多應用支援
在Struts 1.1中可以定義和支援多重的子應用。這意味著你能將你的應用放在更易於維護的子應用中。你不再需要在唯一的struts-config.xml檔案之外偵測來源控制。
另一個使用子應用的原因是根據客戶而改變的控制流。在某些應用程式中,你可能有一些通用的頁面,但是控制流也許會因為登陸應用程式的客戶的不同而有所改變。你能把這個控制流的元資料存入資料庫並產生web.xml檔(或該文件中的一部分),與不同的struts-config.xml檔一起。
假如你曾對Struts 1.x進行過開發,你可能注重到了許多web.xml文件中的元素已經移到了Struts 1.1的struts-config.xml文件中。這是因為現在他們是應用特定(application-specific)的。多重的子應用透過在請求URI的相對於上下文部分開始的前綴來確定。如果沒有應用前綴能夠匹配,則選擇預設配置。預設設定擁有一個空字串的前綴。執行預設設定的這種方式對可能只定義一個應用的Struts 1.0.x是向後相容的。
假如你擁有一個包含不同功能模組的大型應用,那麼用協同運作的子應用取代一個巨大的應用會更有意義。下面所示的文件web.xml顯示如何定義子應用程式。
config
/WEB-INF/struts-config.xml
config/catalog
/WEB-INF/struts-config-catalog.xml
config/sorter
/WEB- INF/struts-config-sorter.xml
當使用子應用時,你可能定義上下文相關的請求URI來指定使用哪一個子應用。例如,對表單的動作可能如下所示:
引用了預設的子應用,或
『catalog。實際上你不必這麼做。你可以在catalog子應用程式中用/listCds假如你想這麼做。基本規則是:所有在1.0版本中上下文相關的struts-config.xml參數現在在1.1版本中是子應用前綴相關的。這樣,在沒有修改的情況下一個單一的應用既可以作為預設子應用也可作為指定的子應用。
以上就是學習Jakarta Struts 1.1 (二)的內容,更多相關文章請關注PHP中文網(www.php.cn)!