`

spring MVC之用表单控制器处理表单(一)

 
阅读更多

spring MVC之用表单控制器处理表单(一)

----------

 

创建表单控制器

 

 

在web应用程序中,经常要处理表单。表单控制器既要为用户显示表单,又要处理表单提交。表单处理可能是件非常复杂且充满变数的任务。如果从头开始构建表单控制器,会牵涉到太多的表单处理细节。

Spring MVC提供的SimpleFormController类定义了基本的表单处理流程。它支持命令对象的概念,并且可以将表单域的值绑定到命令对象的同名属性上。通过扩展SimpleFormController类,控制器就可以继承处理表单的能力。

当HTTP GET请求SimpleFormController显示表单时, 它会将表单视图呈现给用户。当HTTP POST请求提交该表单时,SimpleFormController就会将表单域的值绑定到命令对象上,并调用onSubmit()方法,以这种方式来处理表单提交。如果表单处理成功,会呈现success视图。否则,呈现带错误信息的表单视图。

为了适应不同的表单需求,SimpleFormController允许你覆盖其中的生命周期方法,以此定制表单处理流程。

 

 

创建表单控制器

通过扩展SimpleFormController类,可以为这个控制器指定命令类(在本例中是Reservation),然后表单域的值将被绑定到命令对象的同名属性中。你还可以指定视图要访问的命令对象的名称(在本例中是reservation),但这是可选的,默认名称为command。

package com.apress.springrecipes.court.web;
...
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.mvc.SimpleFormController;
public class ReservationFormController extends SimpleFormController{
	private ReservationService reservationService;
	public ReservationFormController(){
		setCommandClass(Reservation.class);
		setCommandName("reservation");
	}
	public void setReservationService(ReservationService reservationService){
		this.reservationService = reservationService;
	}
	protected void initBinder(HttpServletRequest request,
		ServletRequestDataBinder binder)throws Exception{
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		dateFormat.setLenient(false);
		binder.registerCustomEditor(Date.class,new CustomDateEditor(dateFormat,true));
	}
	protected void doSubmitAction(Object command)throws Exception{
		Reservation reservation = (Reservation)command;
		reservationService.make(reservation);
	}
}

由于表单域的值都是作为字符串提交的,为了将这些绑定到命令对象上,表单控制器可能需要进行类型转换。类型转换实际是由注册在这个控制器中的属性编辑器来执行的。Spring预先注册了几个属性编辑器,用来转换大家熟知的数据类型,如数字类型布尔类型。你必须为其他的数据类型注册定制的编辑器,,如java.util.Date。定制的属性编辑器都被注册到initBinder()方法ServletRequestDataBinder参数中。

在绑定表单域值时如果发生任何错误,SimpleFormController会自动呈现带有错误信息的表单视图。如果一切顺利,则会

调用onSubmit()方法来处理表单提交。在onSubmit()方法中,可以通过参数获取绑定了表单域值的命令对象。对于这个控制器而言,它是个Reservation对象,因为你将命令类设置为Reservation。onSubmit()方法的三个变体可供覆盖。为了访问符合你需要的方法参数,应该覆盖它们中最简单的那个。 

protected ModelAndView onSubmit(Object command)throws Exception;
protected ModelAndView onSubmit(Object command,BindException errors)
	throws Exception;
protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,
	Object command,BindException errors)throws Exception;

在覆盖onSubmit()方法时,必须返回ModelAndView对象。如果只需在命令对象上执行一个动作,并在这个动作完成时返回成功视图,可以覆盖doSubmitAction()方法,它的返回类型为void,默认呈现成功视图。

在声明这个控制器时,为了进行预订,还需要一个指向服务层中的reservationService Bean的引用。此外,还必须为这个表单控制器设置表单视图和成功视图,分别是formView和successView属性。

<bean id="reservationFormController"
	class="com.apress.springrecipes.court.web.ReservationFormController">
	<property name="reservationService" ref="reservationService"/>
	<property name="formView" value="reservationForm"/>
	<property name="successView" value="reservationSuccess"/>
</bean>

 

 

分享到:
评论

相关推荐

    Spring MVC 向导控制器完整的例子

    这是一个简单完整的Spring MVC向导控制器(AbstractWizardFormController)的例子,包含所需的类包,可以运行,也是我重新熟悉Spring 的第二例子,明天再上传Spring 的例外个例子,如有问题,我们可以互相学习下.

    [免费]Spring MVC学习指南(高清)

    全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...

    大优惠 Spring MVC学习指南(第2版)2017.pdf

    全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...

    精通Spring MVC 4

    Web 应用、精通 MVC 结构、处理表单和复杂的 URL 映射、文件上传与错误处理、创建 RESTful 应用、保护应用、单元测试与验收测试、优化请求、将 Web 应用部署到云等内容, 循序渐进地讲解了 Spring MVC 4 的开发技巧...

    Spring MVC.pptx

    详细的Spring MVC教程,内容包括控制器 重定向 保存并获取属性参数 拦截器 表单标签和验证表单 视图和视图解析器 上传文件 数据转换和格式化

    Spring MVC学习指南

    全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南

    全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...

    使用Spring MVC表单标签_IT168文库.doc

    在低版本的Spring中,你必须通过JSTL或...不过这一情况已经一去不复返了,从Spring 2.0开始,Spring MVC开始全面支持表单标签,通过Spring MVC表单标签,我们可以很容易地将控制器相关的表单对象绑定到HTML表单元素中。

    spring mvc服务端表单验证实例

    spring mvc服务端表单验证实例 能跑起来看效果 lib齐全 希望对您的学习有帮助

    spring mvc标签使用指南

    13.9. 使用Spring的表单标签库 1 13.9.1. 配置 1 13.9.2. form标签 1 13.9.3. input标签 3 13.9.4. checkbox标签 3 13.9.5. checkboxes标签 6 13.9.6. radiobutton标签 6 13.9.7. radiobuttons标签 7 13.9.8. ...

    Spring MVC 3.0实战指南.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...

    注册表单spring MVC+hibernate+spring+easyui

    注册表单spring MVC+hibernate+spring+easyui 简单 方便

    Spring MVC 3.0 单表单 同时提交 不同对象到后台

    自定义 RequestBean 注解 及 WebArgumentResolver 完成如下格式表单提交 最简单的 是 新定义 一个 过渡对象 Objects 其包含 user group.....等 然后用如上 格式提交 最终 到后台 进行各取所需

    spring mvc深入总结

    spring mvc 深入总结,文章是转载拷贝而来,谢谢原作者!

    Spring.MVC-A.Tutorial-Spring.MVC学习指南.rar

    全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...

    layui 图片上传+表单提交+ Spring MVC的实例

    今天小编就为大家分享一篇layui 图片上传+表单提交+ Spring MVC的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Spring MVC3复杂表单终极解决办法

    NULL 博文链接:https://rochoc.iteye.com/blog/1486983

    spring mvc 3.2 参考文档

    Spring的视图解析也非常灵活,控制器通常负责准备含有数据的model Map并选择一种视图名称,当然,它也可以直接直接写响应流,并完成该请求。视图名称解析可以根据文件扩展名或者Accept头内容类型协商,通过bean的...

Global site tag (gtag.js) - Google Analytics