百度文库地址:
http://wenku.baidu.com/view/6a7f4400cc17552707220880.html
使用SimpleFormController时,你无需为初始化表单编写额外的控制器,当你通过GET请求访问表单控制器时,表单控制器自动将请求导向到表单录入页面。而当你通过POST请求访问表单控制器时,表单控制器执行表单提交的业务,根据处理成功与否,或导向到成功页面,或导向到表单录入页面(当发生异常时导向到错误页面)。
SimpleFormController的工作流程比较复杂,我们通过下面的流程图对此进行描述:
1.当表单控制器接收到GET请求时,它调用formBackingObject()方法,创建表单对象。该方法可以被子类覆盖,对于编辑操作的表单来说,你可以通过该方法从数据库中加载表单对象,当表单页面显示时,表单显示出待编辑的数据了;
2.表单对象和页面表单数据之间需要通过属性编辑器实现双向转化,对于非基本数据类型或String类型的属性来说,你可能需要注册一些自定义编辑器。你可以通过覆盖initBinder()方法,通过调用binder.registerCustomEditor()的方法注册编辑器;
3.表单对象通过bindOnNewForm属性(可以通过配置设置,默认为false)判断是否需要将GET请求参数绑定到formBackingObject()方法创建的表单对象中。如果bindOnNewForm为true,执行绑定操作,在绑定完成后,还将调用onBindOnNewForm()回调方法(子类可以提供具体实现)。否则到下一步。不过一般情况下,GET请求参数是用于加载等编辑表单对象的ID值,如topicId、forumId等,一般无需进行绑定;
4.调用referenceData()方法(子类可提供具体实现)准备一些关联的数据,如性别下拉框数据,学历下拉框数据等。一般采用ModelMap创建视图业务中需要用到的请求属性数据,键为属性名,值为属性值,如ModelMap("param1", "paramValue1");
5.使用控制器formView定义的视图渲染表单对象;
6.用户填写或更改表单后,提交表单,向表单控制器发起一个POST请求;
7.接收到POST请求时,表单控制器知道这是一个表单数据提交的操作,所以启动表单提交处理流程;
8.首先通过sessionForm属性判断表单控制器是否启用了Session。如果启用了Session,直接从Session中取出原表单对象,否则再次调用formBackingObject()方法构造出一个表单对象。sessionForm默认为false,可以通过配置进行调整,启用Session可能提高运行性能,但会占用一定的内存;
9.将POST请求参数填充到表单对象中;
10.调用onBind()方法,该方法允许你在表单填充完成后,合法性校验之前执行一些特定的操作;
11.如果validateOnBinding属性设置为true,注册在控制器中的校验器开始工作,对表单对象的属性值执行合法性校验。如果有合法性错误,将被注册到Errors对象中(关于如何注册校验器,我们将稍后介绍);
12.调用onBindAndValidate()方法,该方法允许你在数据绑定及合法性校验后,执行一些额外的自定义操作,你也可以在这里,执行一些额外的合法性校验;
13.调用processFormSubmission()方法处理提交任务,该方法内部又包含后续几步工作;
14.判断方法入参传入errors是否包含错误,如果包含错误返回到formView对应的表单页面中,否则到下一步;
15.通过isFormChangeRequest()方法(默认为false)判断请求是否为表单更改请求,如果为true,调用onFormChange()方法,然后返回到formView对应的表单页面,否则到下一步;
16.如果子类覆盖了onSubmit()方法,执行之,否则执行子类的doSubmitAction()方法。通过这两者之一完成业务的处理,然后返回successView属性指定的成功页面。
发表评论
-
spring data jpa
2014-10-03 22:23 654http://www.ibm.com/developerwor ... -
quartz
2014-09-19 16:26 547基本讲解: http://www.blogjava ... -
数据库读写分离
2014-06-18 20:29 1794java代码: http://blog.csdn. ... -
zookeeper
2014-03-29 14:31 0http://wenku.baidu.com/view/6ad ... -
shiro 使用手册 cas and shiro
2013-07-23 13:54 750http://www.360doc.com/content ... -
shiro code analysis
2013-07-16 14:44 1代码分析 http://blog.csdn.net/ja ... -
在Spring中使用Hessian Remoting技术
2013-07-03 17:14 592http://blog.csdn.net/caihaijian ... -
spring 依赖注入源码,AOP源码
2013-05-18 14:24 574Aop 代码: http://www.goldendoc ... -
hadoop
2013-05-13 20:02 748http://hadoop.group.iteye.com/ ... -
Spring事务配置方式和spring里面事务的传播属性和事务隔离级别
2013-04-17 22:01 442http://blog.csdn.net/it_man/art ... -
Spring源代码解析
2013-04-13 20:56 722Spring源代码解析(收藏) Spring源代 ... -
spring 拦截
2013-04-11 14:28 650http://jiwenke-spring.blogspot. ... -
Spring MVC中的HandlerMapping
2013-04-03 16:43 851http://blog.csdn.net/prince2270 ... -
spring rmi
2013-04-01 18:09 553link:http://blog.csdn.net/shi ... -
Spring transactionmanager
2013-03-14 23:29 775from :http://www.cnblogs.com/r ... -
Spring事物管理
2012-11-19 13:50 666文章来自:http://blog.csdn.net/da ... -
Spring Bean 生命周期
2011-12-28 14:43 1107Bean生命周期涉及到的方 ... -
DispatcherServlet被初始化的源头
2011-10-16 15:52 774web 服务器初始化: 首先SttpServletBean 继 ... -
Spring 事务机制
2011-10-15 21:50 772文章转自:http://blog.csdn.net/lenol ... -
ehcache 介绍
2011-10-07 22:06 715转自:http://www.josdoc.com/html/c ...
相关推荐
在Spring MVC框架中,`SimpleFormController`是一个基础的控制器类,它简化了处理表单提交和模型数据绑定的过程。这个控制器是Spring MVC早期版本中的一个组件,现在已经被`@Controller`注解的类所取代,尽管如此,...
本篇文章将详细探讨`Spring MVC`中的`SimpleFormController`类及其使用方法。 `SimpleFormController`是Spring MVC早期版本中用于处理表单数据的控制器类,它为开发者提供了一种简化表单处理的抽象。在Spring 3.0...
springMVC3学习(六)--SimpleFormController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988733
本示例将深入探讨`SimpleFormController`和`MultiActionController`这两种控制器在Spring MVC中的应用。 首先,`SimpleFormController`是Spring MVC早期版本中提供的一个抽象控制器,主要用于处理表单提交。它内置...
首先,我们有一个`Login`类,它是`SimpleFormController`的扩展。`SimpleFormController`是Spring MVC早期版本中用于处理表单提交的基础控制器。在`onSubmit`方法中,我们获取到用户提交的数据(`User`对象),并将...
- **内置实现类**:除了基本的`Controller`接口外,Spring还提供了许多内置的控制器实现,如`AbstractController`、`AbstractCommandController`和`SimpleFormController`等,这些控制器类为开发人员提供了更多的...
public class SimpleFormController extends org.springframework.web.servlet.mvc.SimpleFormController { public SimpleFormController() { setCommandClass(User.class); setCommandName("user"); } ...
通过以上讨论,我们可以看到Spring MVC中的`<spring:bind>`和`<spring:message>`标签是如何简化视图层的编程,以及`SimpleFormController`如何协助处理表单提交和验证。了解这些核心概念有助于构建更高效、更健壮的...
在传统的Spring MVC中,Controller通常需要实现`org.springframework.web.servlet.mvc.Controller`接口,或者是继承`SimpleFormController`或`MultiActionController`。但是使用注解后,Controller不再需要继承任何...
这与传统的实现 `org.springframework.web.servlet.mvc.Controller` 接口或者继承 `SimpleFormController` 或 `MultiActionController` 不同,`@Controller` 注解使得我们的类变成了一个纯粹的 POJO,无需额外的接口...
它提供了多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,满足不同层次的控制需求。与Struts不同,SpringMVC允许直接使用任意对象作为命令或...
去几年,REST逐渐成为影响Web框架、Web协议与Web应用设计的重要概念...更进一步,如果你手头有一个Spring MVC应用,使用了控制类继承(SimpleFormController等),你可能还意识不到现在的Spring MVC对REST广泛的支持。
控制器可以通过多种方式实现,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController、AbstractWizardFormController等,根据应用需求选择合适的基类。与Struts相比,...
Spring MVC 提供了一些控制器,如 SimpleFormController 和 AbstractWizardController,但它们仍然没有完全解决页面流程的管理问题。 Spring Web Flow 提供了一种统一的方法来定义和实现页面流程,使得流程逻辑独立...
- 介绍如何升级SimpleFormController。 #### View - **PDF示例-BeanView** - 提供生成PDF文件的具体案例。 - **开发规范** - 提供View层的设计和编码规范。 #### 数据校验配置 - **校验配置** - 介绍如何...
默认的控制接口提供了一个简单的方法`handleRequest(request, response)`,通过扩展AbstractController、AbstractCommandController、SimpleFormController等基类,可以实现多层控制逻辑。与Struts不同,Spring允许...
public class FileUploadController extends SimpleFormController { private static final Log log = LogFactory.getLog(FileUploadController.class); @Override protected ModelAndView onSubmit...
Spring提供了多种控制器基类,如`AbstractController`、`AbstractCommandController`、`MultiActionController`、`SimpleFormController`和`AbstractWizardFormController`,以适应不同层次的控制需求。与Struts不同...