Jhonney的專欄

             ----人見人愛
          隨筆 - 49, 文章 - 1, 評論 - 23, 引用 - 0
          數據加載中……

          SimpleFormController workflow

                很久前,對SimpleFormController 和AbstractWizardFormController做過一段深入的分析,并對向導型的做了個實例,但是估計是很少動手了,現在對這些東西又模糊了,我快瘋了。
                需要注意的是這兩個控制器都是橫跨兩個頁面的控制器,一個是get進入修改或新增頁面,另一個就是頁面提交即保存或增加

                由于SimpleFormController是繼承AbstractFormController,在該AbstractFormController中的handleRequestInternal方法需要判斷當前提交的方法是Get還是Post,如果是Get則是New一個View,如果是Post則是運行客戶端業務邏輯,然后跳轉到成功頁面。

          •  通過Get 方式請求一個View

          1、Controller受到一個Get請求;

          2、formBackingObject()方法,如果需要讀取數據庫,這里是一個比較好的地方去做這件事情。然后將Object通過request.setAttribute來傳遞到頁面;如果頁面表單需要綁定多個Object,可以在這里讀取數據庫取得,然后設置到頁面上。

          3、initBinder() 這里是用來進行數據格式化轉換的;如果在頁面上顯示某些類型需要進行格式化顯示,那么需要在XXXXFormController中重載該方法,指定特定的轉換器完成對特定Object的設置。如對于日期格式需要在本方法中增加如下代碼:

          binder.registerCustomEditor(Date.class, null, new CustomDateEditor(

          new SimpleDateFormat("MM/dd/yyyy"),true));

          4、調用AbstractFormController.handleRequestInternal方法,在該方法中判斷,如果是新建一個Form View,則調用ShowNewForm方法,在ShowNewForm方法中調用了ShowForm方法,SimpleFormController實現了此方法,指向的url是Controller中注冊的formView參數。

          6、View 模塊完成,顯示給用戶。

           

          • 通過Post方式提交一個Form

          1、  提交后根據Action指向的URL在urlMapping配置中找到指定的Controller;

          2、  如果配置了Validator則使用該Validator(見applicationContext-validation.xml)進行相關的驗證;缺省是beanValidator。錯誤信息寫入到errors參數里。

          3、  調用AbstractFormController.handleRequestInternal方法,在該方法中判斷是通過Post來調用此方法,則調用processFormSubmission方法,該方法會先判斷errors中是否有驗證錯誤,如果有則返回到原表單頁面,顯示錯誤信息。

          4、  驗證通過后進入onSubmit方法,該方法的command參數對應綁定到頁面的對象,

          如果在表單中有多個對象需要進行綁定,那么其它對象可以通過this.bindAndValidate(HttpServletRequest request, Object command);方法來進行綁定。

          5、  做相關的業務操作。

          6、  往返回界面上輸出結果提示信息,通過getText和saveMessage()方法完成。getText()第一個參數是在資源文件中的信息代碼,第二個參數是發給該信息的參數,在該信息中通過{0}來讀取,第三個參數是當前使用的Locale。saveMessage()的信息顯示是通過common\messages.jsp來進行。

          7、  返回一個ModelAndView(new RedirectView(success)),success對應action-servlet.xml文件該Controller所配置successView,跳轉路徑是相對路徑。

          而對于MultiActionController來說,要么繼承這個類,要么給它設個delegate,注意不能類中出現方法多態。相對簡單一些

          posted on 2007-06-22 22:01 Jhonney 閱讀(538) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 四会市| 襄垣县| 嘉定区| 五华县| 顺昌县| 克拉玛依市| 浪卡子县| 鱼台县| 大同市| 中江县| 宜州市| 义马市| 上饶县| 和田市| 普定县| 临漳县| 崇信县| 新化县| 韶关市| 郎溪县| 舒城县| 都安| 壶关县| 旺苍县| 五河县| 临泽县| 南康市| 炉霍县| 海林市| 仁化县| 墨江| 肇东市| 成武县| 尼木县| 土默特右旗| 双柏县| 塘沽区| 西城区| 玉龙| 伊吾县| 盐池县|