Love Pisces

          It's not your aptitude but your attitude that determines your altitude!
          posts - 2, comments - 43, trackbacks - 0, articles - 9

          Struts應(yīng)用之ActionForm

          Posted on 2007-06-04 13:47 筱筱 閱讀(491) 評論(0)  編輯  收藏 所屬分類: Struts學(xué)習(xí)日記

          Struts框架中的視圖組件主要包括:
              ·JSP頁面
              ·ActionForm類
              ·Struts自定義標(biāo)記
              ·消息資源
                 其中,ActionForm類是Struts框架的核心組件之一,是Struts的關(guān)鍵視圖組件。

          1.ActionForm的作用機(jī)理
                ActionForm本質(zhì)上是一種JavaBean,是專門用來傳遞數(shù)據(jù)的DTO(Data Transfer Object,數(shù)據(jù)傳遞對象)。它包括用于表單數(shù)據(jù)驗(yàn)證的validate()方法和用于數(shù)據(jù)復(fù)位的reset()方法。
                Struts框架利用ActionForm對象來臨時存放視圖頁面中的表單數(shù)據(jù)。例如一個登錄頁面會有一個用戶輸入框和一個密碼輸入框,以及用來提交登錄請求的按鈕。當(dāng)用戶提交登錄請求后,Struts將用戶名和密碼兩個輸入域的數(shù)據(jù)自動填充到相應(yīng)的ActionForm對象中,然后控制層可以從該ActionForm對象中讀取用戶輸入的表單數(shù)據(jù),也可以把來自模型層的數(shù)據(jù)存放到ActionForm中,然后返回給視圖顯示。

                ActionForm有請求(request)和會話(session)兩種作用域(scope)。如果ActionForm的作用域設(shè)定為request,ActionForm實(shí)例將保存在request對象中,像其他保存在request對象中的屬性一樣,僅在當(dāng)前的請求/響應(yīng)范圍內(nèi)有效。如果ActionForm的作用域設(shè)定為session,那么ActionForm實(shí)例將被保存在session對象中,同一個ActionForm實(shí)例在整個HTTP會話中有效。


                當(dāng)驗(yàn)證ActionForm時,如果檢測到一個或多個驗(yàn)證錯誤,Struts框架會把錯誤轉(zhuǎn)發(fā)回配置文件struts-config.xml中<action>元素的input屬性所指定的輸入頁面。

          2.ActionForm的使用方法

                (1)創(chuàng)建ActionForm
                可以通過擴(kuò)展Struts軟件包的ActionForm類,來創(chuàng)建具體的ActionForm。Struts軟件包中的ActionForm類本身是一個抽象類,在擴(kuò)展該類時,為每一個要從HTML表單中捕獲的輸入域定義一個屬性,使表單輸入域與ActionForm的屬性一一對應(yīng),以使ActionForm能夠捕獲需要的表單輸入。定義了具體的屬性,就可以覆寫validate()和reset()方法,來實(shí)現(xiàn)具體的ActionForm驗(yàn)證規(guī)則和初始化方法。

                (2)配置ActionForm
                每創(chuàng)建一個ActionForm類,就需要在Struts的配置文件struts-config.xml中配置這個類,例如:
             <form-beans>
                <form-bean name="loginActionForm" type="login.loginActionForm" />
             </form-beans>
                <form-beans>元素用來指定全體ActionForm的配置,一個Struts應(yīng)用所有的ActionForm的配置都要位于該元素標(biāo)記內(nèi)。<form-beans>元素的子元素<form-bean>用來配置一個具體的ActionForm類,每個<form-bean>元素對應(yīng)的內(nèi)容為一個form bean實(shí)例。一旦定義了<form-beans>元素,就可以在Action中使用它。

                (3)訪問ActionForm
                ActionForm可以被JSP,Struts自定義標(biāo)記,Action或其他Web組件訪問。訪問ActionForm的一般方法如下:
                ·使用Struts HTML標(biāo)記庫
                Struts HTML標(biāo)記庫提供了一組和ActionForm密切關(guān)聯(lián)的標(biāo)記,這些標(biāo)記對應(yīng)到HTML表單域。如<html:form>標(biāo)記對應(yīng)HTML的<form>標(biāo)記,<html:text>標(biāo)記對應(yīng)HTML表單的text類型<input>輸入域。這些標(biāo)記和ActionForm交互,以把ActionForm中的屬性值顯示出來。

                ·從request或session對象中取出ActionForm對象
                根據(jù)作用域的不同,Struts框架把ActionForm實(shí)例保存在request或session對象中,保存時采用的key值為<form-bean>元素的名字,即name屬性的值。因此,可以像取出任何存放在request或session對象中的屬性一樣取出ActionForm實(shí)例。例如:
                loginActionForm form=(loginActionForm)request.getAttribute("loginActionForm"); 

                ·在Action類的execute()方法中直接訪問ActionForm
                如果配置了ActionForm和Action映射,Struts框架就會把ActionForm作為參數(shù)傳遞給Action類的execute()方法,在execute()方法中,可以直接讀取或設(shè)置ActionForm屬性。

          3.表單數(shù)據(jù)驗(yàn)證
                表單驗(yàn)證是ActionForm的主要功能之一,要實(shí)現(xiàn)這個功能,我們需要采取4個步驟:
                ·重寫validate()方法。
                ·在資源文件ApplicationResources.properties中設(shè)置可能的驗(yàn)證錯誤的標(biāo)識。
                ·要在配置文件struts-config.xml中,把<action>元素的validate屬性設(shè)置為true,并添加<message-resources>元素以指明資源文件的存放路徑。
                ·在相應(yīng)輸入頁面的相應(yīng)位置加如錯誤標(biāo)記<html:errors>,以輸出可能的驗(yàn)證錯誤。
                (1)重寫validate()方法
                對該form bean的validatet()方法進(jìn)行重寫。ActionErrors類封裝了一組驗(yàn)證錯誤,它的用法類似Map類。而ActionMessage類封裝了單個驗(yàn)證錯誤,它的構(gòu)造函數(shù)內(nèi)的參數(shù)就指向資源文件內(nèi)的一個錯誤文本。例如語句“ActionMessage("login.password.error");”中的參數(shù)"login.password.error"其實(shí)就是資源文件ApplicationResources.properties中的一條錯誤文本的鍵(key)。通過ActionErrors對象的add()方法,可以把ActionMessage對象加入到ActionErrors對象中。
                (2)設(shè)置資源文件
                在Struts的資源文件ApplicationResources.properties中設(shè)置可能的驗(yàn)證錯誤的標(biāo)識:
          #用戶名錯誤
          error.username.required=<li>Please input your username again!</li>
          #密碼錯誤
          error.password.required=<li>Please input your password again!</li>
                (3)修改配置文件struts-config.xml
                將配置文件struts-config.xml中<action>元素的validate屬性設(shè)定為true。此外,還需要增加<message-resource>元素,以指明資源文件的路徑。
                (4)在輸入頁面中加入錯誤標(biāo)記
                表單數(shù)據(jù)驗(yàn)證的目的是,一旦用戶在輸入頁面表單中輸入的數(shù)據(jù)不符合要求或出現(xiàn)錯誤,Struts驗(yàn)證機(jī)制將把驗(yàn)證錯誤在該輸入頁面相應(yīng)的位置顯示出來。
                <html:errors>是Struts的一個自定義標(biāo)記。它能根據(jù)它的property屬性從資源文件ApplicationResources.properties中取出相應(yīng)的驗(yàn)證錯誤,并在輸入頁面中指定的位置顯示驗(yàn)證錯誤。

          主站蜘蛛池模板: 蕉岭县| 金寨县| 淳安县| 抚顺县| 崇信县| 浙江省| 普安县| 康平县| 盐城市| 德保县| 甘洛县| 开江县| 万源市| 攀枝花市| 天全县| 察雅县| 通江县| 边坝县| 安陆市| 利津县| 陵川县| 木里| 鄄城县| 专栏| 江津市| 平度市| 永靖县| 大渡口区| 布拖县| 武川县| 吉安市| 贡嘎县| 霍林郭勒市| 阜康市| 长沙市| 剑河县| 文山县| 石阡县| 宁蒗| 家居| 旬邑县|