首先看一下AbstractFormController中handleRequestInternal()的代码。
protected ModelAndView handleRequestInternal(HttpServletRequest request,<wbr style="LINE-HEIGHT: 1.3em">
HttpServletResponse response) throws Exception {</wbr><wbr style="LINE-HEIGHT: 1.3em">
// Form. submission or new form. to show?</wbr><wbr style="LINE-HEIGHT: 1.3em">
if (isFormSubmission(request)) {</wbr><wbr style="LINE-HEIGHT: 1.3em">
// Fetch form. object from HTTP session, bind, validate, process submission.</wbr><wbr style="LINE-HEIGHT: 1.3em">
try {</wbr><wbr style="LINE-HEIGHT: 1.3em">
Object command = getCommand(request);</wbr><wbr style="LINE-HEIGHT: 1.3em">
ServletRequestDataBinder binder = bindAndValidate(request, command);</wbr><wbr style="LINE-HEIGHT: 1.3em">
BindException errors = new BindException(binder.getBindingResult());</wbr><wbr style="LINE-HEIGHT: 1.3em">
return processFormSubmission(request, response, command, errors);</wbr><wbr style="LINE-HEIGHT: 1.3em">
}</wbr><wbr style="LINE-HEIGHT: 1.3em">
catch (HttpSessionRequiredException ex) {</wbr><wbr style="LINE-HEIGHT: 1.3em">
// Cannot submit a session form. if no form. object is in the session.</wbr><wbr style="LINE-HEIGHT: 1.3em">
if (logger.isDebugEnabled()) {</wbr><wbr style="LINE-HEIGHT: 1.3em">
logger.debug("Invalid submit detected: " + ex.getMessage());</wbr><wbr style="LINE-HEIGHT: 1.3em">
}</wbr><wbr style="LINE-HEIGHT: 1.3em">
return handleInvalidSubmit(request, response);</wbr><wbr style="LINE-HEIGHT: 1.3em">
}</wbr><wbr style="LINE-HEIGHT: 1.3em">
}</wbr><wbr style="LINE-HEIGHT: 1.3em">
else {</wbr><wbr style="LINE-HEIGHT: 1.3em">
// New form. to show: render form. view.</wbr><wbr style="LINE-HEIGHT: 1.3em">
return showNewForm(request, response);</wbr><wbr style="LINE-HEIGHT: 1.3em">
}</wbr><wbr style="LINE-HEIGHT: 1.3em">
}</wbr><wbr style="LINE-HEIGHT: 1.3em">
SimpleFormController继承自AbstractFormControoler,程序进入到handleRequestInternal(),首先判断是否是提交数据,显然不是的。所以调用showNewForm来显示一个表单,showNewForm调用了formBackingObject()来取得一个表单对象,默认是返回一个commandName指定的类。在修改操作时,可以重载该方法从[url=javascript:;]
<wbr><wbr>数据库</wbr></wbr><wbr></wbr><wbr>[/url]中读取一个表单对象。接下来的initBinder不提。然后showNewForm调用了showForm(),showForm就是显示表单,它首先会调用referenceData(),referenceData默认是返回null。你可以重载它在其中填充一些需要显示在页面上的其他信息。可以返回一个map也可以直接在方法体内使用request.setAttribute()。 </wbr><wbr style="LINE-HEIGHT: 1.3em"></wbr></wbr><wbr style="LINE-HEIGHT: 1.3em">
</wbr><wbr style="LINE-HEIGHT: 1.3em">
程序员可以通过isFormSubmission()来判断用户是否执行提交按钮,如果执行提交,那么这个时候如果设置了isSessionForm(默认为false),程序将从session中查找绑定的对象来接受表单的值。一般情况下isSessionForm默认是false,所以程序会调用formBackingObject()来获取表单数据。<wbr style="LINE-HEIGHT: 1.3em"></wbr></wbr><wbr style="LINE-HEIGHT: 1.3em">
</wbr><wbr style="LINE-HEIGHT: 1.3em">
获取表单数据后,如果挂有validator,那么执行validator中的验证逻辑。验证通过后,进行用户指定的操作,跳转到成功页面。验证失败则跳转当前表单页面,使用showForm(request, response, errors),其中errors对象包含了commandName对象。所以页面可以保留我们的输入数据。<wbr style="LINE-HEIGHT: 1.3em"></wbr></wbr><wbr style="LINE-HEIGHT: 1.3em">
分享到:
相关推荐
虽然`SimpleFormController`在现代Spring MVC应用中不再推荐使用,但其设计理念对理解Spring MVC的流程和控制器角色很有帮助。现在,我们更倾向于使用`@Controller`注解的类,结合`@RequestMapping`来处理请求,以及...
### Spring MVC 附件上传知识点详解 #### 一、Spring MVC框架下的文件上传概述 在Spring MVC框架中实现文件上传功能是十分常见的需求之一。本文档将详细介绍如何在Spring MVC环境中配置并实现文件上传功能,包括...
Spring MVC 详解 Spring MVC 是一个基于 Java 的 Web 应用程序框架,基于模型-视图-控制器(MVC)模式。它提供了一个灵活的方式来开发 Web 应用程序,具有良好的可扩展性和灵活性。 Spring MVC 的核心组件 在 ...
本示例将深入探讨`SimpleFormController`和`MultiActionController`这两种控制器在Spring MVC中的应用。 首先,`SimpleFormController`是Spring MVC早期版本中提供的一个抽象控制器,主要用于处理表单提交。它内置...
### Spring MVC框架详解 #### 一、目的与假设 **目的**:本文旨在为开发者提供一个快速入门Spring Web应用框架的指南。Spring是一款开源框架,主要用于Web应用开发,其官方网站为http://www.springframework.org。...
【Spring MVC注解详解】 Spring MVC 是 Spring 框架的一部分,主要负责处理 Web 应用中的请求和响应。在 Spring 2.5 版本之后,Spring MVC 引入了注解驱动的功能,极大地简化了控制器(Controller)的配置和使用。...
在 Spring 的 Web MVC 构架模式中,视图层是由视图解析器和视图组成的。视图解析器负责解析视图的名称和参数,视图负责将数据渲染到客户端。 5. 模型层 在 Spring 的 Web MVC 构架模式中,模型层是由业务对象和...
8. **与现代Spring MVC的区别**:虽然`SimpleFormController`简化了许多处理流程,但在Spring 3.0之后,推荐使用基于注解的控制器(`@Controller`),配合`@RequestMapping`、`@ModelAttribute`等注解实现更灵活、更...
- 视图解析是Spring MVC中的另一个关键部分,它负责将处理结果渲染成用户可以交互的页面,支持JSP、Velocity等模板技术。 5. **灵活性和可扩展性**: - Spring MVC的设计理念是模块化,开发者可以根据需要选择...
Spring Web MVC框架是Spring框架中的一个重要组成部分,主要用于构建基于Java的应用程序中的Web层。该框架围绕一个核心组件`DispatcherServlet`进行设计,其主要职责是将HTTP请求分发到对应的控制器(Controller)上,...
Spring的Web MVC架构模式是一种在Java开发中广泛使用的轻量级框架,用于构建高效、可测试和可维护的Web应用程序。该框架的核心是DispatcherServlet,它作为中央调度器,负责接收HTTP请求并将其转发给合适的处理器。...
Spring 3 MVC 中引入的注解技术极大地简化了Web层的开发工作,尤其是`@Controller`、`@RequestMapping`等注解的应用,使得控制器的设计更为简洁和灵活。同时,针对DAO和服务层的注解支持也提高了整体架构的清晰度...
Spring Web MVC的核心是`DispatcherServlet`,它负责调度请求,处理映射、视图解析和本地化。默认的控制接口非常简单,可以通过`ModelAndView`对象处理请求和响应。Spring提供了多种控制器基类,如`...
Spring4.3.7版本的Web整合包包含了Spring框架在Web开发中所需的各种组件,这些组件使得开发者能够轻松地实现MVC(Model-View-Controller)模式,以及其他Web相关的功能。 首先,Spring MVC是Spring框架中的核心模块...
`SimpleFormController`是Spring MVC早期版本中用于处理表单提交的基础控制器。在`onSubmit`方法中,我们获取到用户提交的数据(`User`对象),并将其放入模型(`ModelAndView`)中以便于视图渲染。`...
Spring的Web MVC框架允许开发者在Web容器(如Tomcat或Resin)中创建一个中间层,以便在测试环境或独立应用中复用业务逻辑。在J2EE环境中,业务逻辑可以不依赖于容器服务,比如JTA或EJB支持,增强了应用的部署灵活性...
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 ...
本示例主要探讨了两种类型的控制器:SimpleController和MutiActionControl,它们在Spring MVC中扮演着不同的角色。 **SimpleController** SimpleController是Spring MVC早期版本中的一种基础控制器实现,它的名字...
SimpleFormController是Spring MVC中用于处理表单提交的控制器类。 #### 二十二、使用标签作数据绑定 Spring MVC支持数据绑定,通过特定的标签可以在表单元素与模型对象之间建立自动的数据绑定。 #### 二十三、...