`
dq1618
  • 浏览: 57003 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

SimpleFormController流程

阅读更多

SimpleFormController往上繼承自AbstractFormController,而又繼承自AbstractController,
這是開始實作Controller介面的基底類別,再往上的兩個類別各司WebApplicationContext與Http response的資源。

  對於簡單的表單需求,我們通常透過繼承SimpleFormController,並覆寫其onSumit()方法來完成表單功能,
而實際上真正的表單處理流程定義在AbstractFormController

  這邊說明三個我覺得比較常用且不複雜的方法,在繼承了SimpleFormController(AbstractFormController)之後,
您可以覆寫這些方法:formBackingObject()、referenceData()、onBindAndValidate()。

  當瀏覽器使用GET方法向Action發出請求時,會調用formBackingObject()方法,您可以在這個方法中預先設定好表單物件,在表單網頁中就會顯示表單的預設值,例如:

java 代码
  1. protected Object formBackingObject(HttpServletRequest request) throws Exception {   
  2.     LoginForm loginForm = new LoginForm();   
  3.     loginForm.setUsername("guest");   
  4.     loginForm.setPassword("guest");   
  5.   
  6.     return loginForm;   
  7. }  

在使用者送出資料之後,如果sessionForm為false,則會再呼叫formBackingObject()方法取得表單物件,若sessionForm設定為true,則會試著有session中找尋表單物件。

您可以在referenceData()中定義一些JSP頁面可以參考到的參數,例如:

java 代码
  1. protected Map referenceData(HttpServletRequest request) throws Exception {   
  2.     Map ref = new HashMap();   
  3.     ref.put("defalutUser""guest");   
  4.   
  5.     return ref;   
  6. }  

 

onBindAndValidate()就如其名所示,當表單物件的資料已經綁定,並且還沒開始驗證之前,您可以試著在這個方法中作一些預處理,例如進行字母大小寫轉換,附帶一些額外的資訊等等:

java 代码
  1. protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) throws Exception {   
  2.  }  

url请求来到时,这样处理:
    a) 请求传递给一个controller对象
    b) 调用formBackingObject()方法,创建一个command对象的实例。
    c) 调用initBinder(),注册需要的类型转换器
    d) 调用showForm()方法,返回准备呈现给用户的视图
    e) 调用referenceData()方法,准备给用户显示相关的数据。如用户登录需要选择的年度信息
    f) 返回formView指定的视图
表单请求来到时,这样处理:
    a) 调用formBackingObject()方法,创建一个command对象的实例。
    b) 将请求传来的参数写入command对象
    c) 如果设置为要求验证,则调用validator类进行数据验证
    d) 调用onBindAndValidate()方法,该方法允许自定义数据绑定和校验处理
    e) 调用onSubmit()方法,进行业务逻辑处理

分享到:
评论
3 楼 xnxylxh 2010-09-30  
谢谢  辛苦了哈
2 楼 chenjianjx 2008-09-23  
不错。不过对 onBindAndValidate()有疑义:似乎是在校验之后,而不是在校验之前。
官方文档说:
Called on each submit, after standard binding and validation, but before error evaluation


现在问题是:“error evaluation” 是什么?
1 楼 ziye 2007-10-24  
总算搞明白这个流程了 谢谢

相关推荐

    springMVC3学习(六)--SimpleFormController(源码)

    springMVC3学习(六)--SimpleFormController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988733

    一个最简单的SimpleFormController使用

    NULL 博文链接:https://mgz-99-163-com.iteye.com/blog/690417

    Spring MVC控制器之SimpleFormController使用

    NULL 博文链接:https://huihai.iteye.com/blog/1967697

    Spring MVC 例子

    Spring MVC例子 有SimpleFormController ,MultiationController等控制器的应用介绍.算是比较完整的例子大家看看吧。

    Web框架-spring

    Spring的web框架是围绕...你可以通过实现这个接口来生成自己的控制器(也可以称之为处理器),但是从Spring提供的一系列控制器继承会更省事,比如AbstractController、AbstractCommandController和SimpleFormController

    spring 2.0表单绑定实例

    自己写的spring表单绑定的小例子,分别使用SimpleFormController,MultiActionController,spring的form tag和validator。 还在MultiActionController里面实现了表单的绑定

    legacy-app:使用 Spring 演讲改进您的遗留应用程序的代码

    3.2 版本是包含SimpleFormController的最后一个版本,这将允许更轻松的迁移路径。 现在可以选择使用SimpleFormController虽然已弃用),或者切换到@Controller 。 JDK从1.4更新到1.6,代码保持不变。为...

    开源框架 Spring Gossip

    PropertiesMethodNameResolver ParameterizableViewController AbstractCommandController AbstractFormController SimpleFormController AbstractWizardFormController ...

    Spring MVC与JAX-RS比较与分析

    去几年,REST逐渐成为影响Web框架、Web协议与Web应用设计的重要概念...更进一步,如果你手头有一个Spring MVC应用,使用了控制类继承(SimpleFormController等),你可能还意识不到现在的Spring MVC对REST广泛的支持。

    Spring-Validator-开源

    Spring-Validator软件包提供了一种自动生成JavaScript客户端验证代码的简单方法,并提供了SimpleFormController的通用验证器

    CryptoPresto:基于Spring MVC的Web平台,用于加密交易和转移

    加密货币 一个基于Spring MVC的网络平台,用于加密货币交易和转移 框架:Spring mvc 5.2.3.RELEASE。... 用户表单提交:SimpleFormController。 IDE:面向Java开发人员的Eclipse Enterprise 2020-09(4.17.0)。

    SPRING API 2.0.CHM

    All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....

    《程序天下:J2EE整合详解与典型案例》光盘源码

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

Global site tag (gtag.js) - Google Analytics