`
z274084093
  • 浏览: 17358 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

SimpleFormController

阅读更多

由于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,注意不能类中出现方法多态。相对简单一些

 

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.      return  loginForm;   
  6. }  

在使用者送出资料之后,如果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,
  2. BindException errors)  throws  Exception {   
  3.  }  

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()方法,进行业务逻辑处理

分享到:
评论

相关推荐

    一个最简单的SimpleFormController使用

    在Spring MVC框架中,`SimpleFormController`是一个基础的控制器类,它简化了处理表单提交和模型数据绑定的过程。这个控制器是Spring MVC早期版本中的一个组件,现在已经被`@Controller`注解的类所取代,尽管如此,...

    Spring MVC控制器之SimpleFormController使用

    本篇文章将详细探讨`Spring MVC`中的`SimpleFormController`类及其使用方法。 `SimpleFormController`是Spring MVC早期版本中用于处理表单数据的控制器类,它为开发者提供了一种简化表单处理的抽象。在Spring 3.0...

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

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

    Spring MVC 例子

    本示例将深入探讨`SimpleFormController`和`MultiActionController`这两种控制器在Spring MVC中的应用。 首先,`SimpleFormController`是Spring MVC早期版本中提供的一个抽象控制器,主要用于处理表单提交。它内置...

    springmvc简单登陆例子

    首先,我们有一个`Login`类,它是`SimpleFormController`的扩展。`SimpleFormController`是Spring MVC早期版本中用于处理表单提交的基础控制器。在`onSubmit`方法中,我们获取到用户提交的数据(`User`对象),并将...

    Spring Web MVC framework中英文对照.pdf

    - **内置实现类**:除了基本的`Controller`接口外,Spring还提供了许多内置的控制器实现,如`AbstractController`、`AbstractCommandController`和`SimpleFormController`等,这些控制器类为开发人员提供了更多的...

    spring mvc 文档

    public class SimpleFormController extends org.springframework.web.servlet.mvc.SimpleFormController { public SimpleFormController() { setCommandClass(User.class); setCommandName("user"); } ...

    SPRING信息

    通过以上讨论,我们可以看到Spring MVC中的`<spring:bind>`和`<spring:message>`标签是如何简化视图层的编程,以及`SimpleFormController`如何协助处理表单提交和验证。了解这些核心概念有助于构建更高效、更健壮的...

    spring_mvc注解入门

    在传统的Spring MVC中,Controller通常需要实现`org.springframework.web.servlet.mvc.Controller`接口,或者是继承`SimpleFormController`或`MultiActionController`。但是使用注解后,Controller不再需要继承任何...

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    这与传统的实现 `org.springframework.web.servlet.mvc.Controller` 接口或者继承 `SimpleFormController` 或 `MultiActionController` 不同,`@Controller` 注解使得我们的类变成了一个纯粹的 POJO,无需额外的接口...

    (完整word版)SSM英文文献翻译.docx

    它提供了多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,满足不同层次的控制需求。与Struts不同,SpringMVC允许直接使用任意对象作为命令或...

    Spring MVC与JAX-RS比较与分析

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

    毕设外文文献翻译-Spring的webMVC构架模式 (2).docx

    控制器可以通过多种方式实现,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController、AbstractWizardFormController等,根据应用需求选择合适的基类。与Struts相比,...

    Spring-WebFlow入门中文文档

    Spring MVC 提供了一些控制器,如 SimpleFormController 和 AbstractWizardController,但它们仍然没有完全解决页面流程的管理问题。 Spring Web Flow 提供了一种统一的方法来定义和实现页面流程,使得流程逻辑独立...

    外文翻译-Spring的web MVC 构架模式 (2).pdf

    默认的控制接口提供了一个简单的方法`handleRequest(request, response)`,通过扩展AbstractController、AbstractCommandController、SimpleFormController等基类,可以实现多层控制逻辑。与Struts不同,Spring允许...

    在一个form表单里同时上传多个文件和文本信息的解决方案

    public class FileUploadController extends SimpleFormController { private static final Log log = LogFactory.getLog(FileUploadController.class); @Override protected ModelAndView onSubmit...

    外文翻译-Spring的web MVC 构架模式.pdf

    Spring提供了多种控制器基类,如`AbstractController`、`AbstractCommandController`、`MultiActionController`、`SimpleFormController`和`AbstractWizardFormController`,以适应不同层次的控制需求。与Struts不同...

    外文翻译Spring地web MVC 构架模式.pdf

    控制器可以是简单接口的实现,如`ModelAndView handleRequest(request, response)`,也可以是更复杂的控制器类,如AbstractController、SimpleFormController等。Spring的数据绑定机制非常灵活,可以处理校验错误,...

    计算机外文翻译-Spring的web-MVC-构架模式.pdf

    - Spring MVC提供多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,帮助开发者处理不同复杂度的控制逻辑。 - 与Struts相比,Spring MVC允许...

Global site tag (gtag.js) - Google Analytics