<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                上篇我們以[登錄為例](http://blog.csdn.net/lovesummerforever/article/details/17348871)講解了struts配置,實現了使用struts框架進行登錄的示例。一些名詞已經在腦海中飄蕩了。 **ActionServlet**:struts的控制器,負責截取URL或分發。提供Model(模型層)和View(視圖層)使用,因此可將它看作是模型和視圖之間的中介。 **ActionForm**:用于封裝用戶的請求參數,而請求參數是通過JSP頁面的表單域傳遞過來的。 **Action**:用戶請求和和業務邏輯的橋梁,每個Action作為業務邏輯的代理,可以調用業務邏輯。 一些問題是有必要再次提起的。 **使用基本的MVC和使用struts框架區別,使用struts好處在哪里?** 我們知道我們不適用框架的時候,在MVC中典型的控制器是servlet,servlet可以獲取參數和邏輯模型的調用和轉向功能。而struts對它做了封裝,為什么要進行封裝?當我們請求到一個servlet,我們在這個servlet中取得參數、調用業務邏輯、轉向,我們在servlet中寫死了轉向頁面,當我們想要換一個轉向頁面的時候就需要改動代碼了,改動代碼后還要重新進行編譯。 而且從表單中傳遞過來的數據全是字符串形式,我們還需要根據實際的需求把字符串轉換為我們需要的類型,如果很多地方需要轉換,并且每次使用每次都要進行轉換,有沒有一種機制,把表單中的字符串拿過來自動轉換為相應的類型呢?不需要我們再進行手動轉換呢? 基于上述的不便,轉向不靈活,表單中的字符串每次都要進行轉換等一系列的原因,struts把這些做了封裝。提取出重復的操作,轉向信息放到了配置文件中,這樣更加靈活了。 在上述問題中,闡述了struts對表單的封裝,在web應用程序開發過程中,開發人員需要大量的時間來處理表單問題,有的時候是通過表單提交一些新的問題,有的是通過表單修改數據,所有這些表單在處的處理在傳統web開發中是非常復雜的。本篇重點說說struts中的表單處理器ActionForm。 **ActionForm** **問題的提出** 在傳統的web應用程序開發中,繁雜的表單處理給開發工作人員帶來了巨大的困難,在傳統的開發語言中,沒有組建可以自動收集用戶輸入的表單內容,開發人員不得不在程序中手動提取表單的值。例如在表單中有這樣的一個文本輸入域:<inputtype=”text” name=”password”> 要在程序中取得這個文本輸入域的值,只能用這樣的方法:request.getParameter(“password”);這樣的處理方法在表單比較小的時候是可以使用的,但是當表單輸入項較多的時候就不得不大量重復類似上面的處理。 **問題的解決** 在Struts中就是使用ActionForm來解決這個問題,對于每一個用戶的表單,需要提供一個ActionForm,這個ActionForm自動把客戶提交的表單保存在這個ActionForm中,然后把這個ActionForm傳遞給Action,從而在Action中可以通過這個ActionForm取出用戶信息,然后根據這些信息完成對應的業務邏輯處理。 例如在Struts中用struts的html標簽表述成下述形式: <html:text property=”password”/> 在這種情況下表單提交后,struts框架會自動把表單中的這個輸入項賦值到ActionForm中的password屬性中,從而把表單中的內容保存在ActionForm中,整個過程由struts自動完成,不需要開發人員干涉。我們在創建ActionForm時要遵循以下規范: (1)每個ActionForm都要繼承org.apache.struts.action.ActionForm類,而且需要為每一個表單提供一個ActionForm。 (2)ActionForm中每個屬性要與表單中的輸入項一一對應。 (3)AcitonForm每個屬性都要提供的getter方法和setter方法。Struts框架就是通過這些方法來保存表單的值,然后在Action中通過這些方法取得表單的值。 (4)如果表單需要驗證,就需要在ActionForm中提供validate方法,這個方法中提供對表單的具體驗證邏輯。這個方法不僅實現了數據驗證同時實現了數據緩沖的作用,在validate方法中驗證用戶提交表單的有效性,當表單驗證失敗時會自動返回用戶輸入頁面,這時候用戶輸入的值都保存在ActionForm中,返回頁面時struts框架會取出AcitonForm中的數據并輸出到對應的用戶輸入項中,保證了用戶開始輸入的表單信息。 **問題的提出** 以上所說的是靜態ActionForm,當我們為每個表單都創建一個AcitonForm的時候,會導致ActionForm數量過多。每個ActionForm過強的聚合性也會使代碼難以維護和重用。怎么樣不用去創建過多的ActionForm?而且當提交表單的屬性名字相同時,不用再重復創建AcitonForm(例如登錄和注冊)? **問題的解決** Struts中可以使用動態ActionForm來解決上述問題。動態ActionForm不需要創建自己的ActionForm,需要在創建自己Action的時候直接把execute方法中傳遞過來的form對象轉化為DynaActionForm。 我們需要更改struts-config.xml中form-beans配置: ~~~ <form-beans> <form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="username" type="java.lang.String" /> <form-property name="age" type="java.lang.Integer"/> </form-bean> </form-beans> ~~~ Action中使用get方法取得表單中的值。 ~~~ /** * 測試動態ActionForm. * @author summer * */ public classDynaActionFormTestAction extends Action { @Override publicActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequestrequest, HttpServletResponse response) throwsException { DynaActionFormdaf = (DynaActionForm)form; //取出map中key值為name,value為類名. Stringusername = (String)daf.get("username"); Integerage = (Integer)daf.get("age"); System.out.println("username"+username); System.out.println("username"+age); returnmapping.findForward("success"); } } ~~~ 靜態ActionForm方式,使用get/set方法,而動態ActionForm方式,使用map的getkey方式,其中key就是標簽name的值。 使用動態ActionForm優點:若更改表單和ActionForm時不需要重新編譯,而靜態的需要更改靜態的ActionForm.java文件,必須重新編譯。缺點:靜態返回的是對應的值,動態ActionForm返回的是對象,我們還要把這個對象進行強制轉換。 下一篇[MVC向struts MVC框架演變過程](http://blog.csdn.net/lovesummerforever/article/details/18963959)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看