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 阅读(525) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: