`

spring MVC之注解开发控制器(三)

 
阅读更多

spring MVC之注解开发控制器(三)

----------

 

 

开发表单控制器

 

在传统的Spring MVC开发方法中,是通过扩展SimpleFormController类来创建简单的表单控制器。这样就定义了基本的表单处理流程,并允许通过覆盖几个生命周期方法来定制流程。在基于注解的Spring MVC开发方法中,可以利用注解模拟表单处理流程.

在基于注解的方法中,添加了@Controller注解的基本控制器类也可以处理表单。你首先要做的就是通@RequestMapping

注解将URL模式映射到这个控制器类中。对于处理表单的控制器,必须提供两个重要的方法。一个是用来响应HTTP GET请求,呈现表单的。另一个是为HTTP POST请求处理表单提交的。这些方法的名称可以是任意的,但是必须利用@RequestMapping注解与HTTP方法关联起来

package com.apress.springrecipes.court.web;
...
import org.springframework.beans.factory.annotation.Autowired;
...
@Controller
@RequestMapping("/reservationForm.htm")
@SessionAttributes("reservation")
public class ReservationFormController{
	private ReservationService reservationService;
	private ReservationValicator validator;
	@Autowired
	public ReservationFormController(ReservationService reservationService,
		ReservationValidator validator){
		this.reservationService = reservationService;
		this.validator = validator;
	}
	@InitBinder
	public void initBinder(WebDataBinder binder){
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyy-MM-dd");
		dateFormat.setLenient(false);
		binder.registerCustomEditor(Date.class,new CustomDateEditor(
			dateFormat,true));
		binder.registerCustomEditor(SportType.class,new SportTypeEditor(
			reservationService));
	}
	@ModelAttribute("sportTypes")
	public List<SportType> populateSportTypes(){
		return reservationService.getAllSportTypes();
	}
	@RequestMapping(method=RequestMethod.GET)
	public String setupForm(@RequestParam(required=false,value="username")
		String username,ModelMap model){
		Reservation reservation = new Reservation();
		reservation.setPlayer(new Player(username,null));
		model.addAttribute("reservation",reservation);
		return "reservationForm";
	}
	@RequestMapping(method=RequestMethod.POST)
	public String processSubmit(@ModelAttribute("reservation")Reservation reservation,
		BindingResult result,SessionStatus status){
		validator.validate(reservation,result);
		if(result.hasErrors()){
			return "reservationForm";
		}else{
			reservationService.make(reservation);
			status.setComplete();
			return "redirect:reservationSuccess.htm";
		}
	}
}

与HTTP GET方法相关联的setupForm()方法,对应于SimpleFormController的formBackingObject()方法它将初始化用于绑定的命令对象。在这个方法中,为了初始化命令对象,可以利用@RequestParam注解获取任何请求参数。然后,你亲自创建命令对象,并将它保存到模型属性中。模型属性的名称实际上是可以在jsp文件中访问到的命令对象名称。如果想要将命令对象保存在会话中,就像启用SimpleFormController的sessionForm属性一样,可以将@SessionAttributes注解应用到控制器类中,并指定要保存在会话中的模型属性的名称

与HTTP POST方法相关联的processSubmit()方法,对应于SimpleFormController的onSubmit()方法。在这个方法中,可以利用@ModelAttribute注解从模型中得到命令对象。在被应用到方法参数时,@ModelAttribute注解会将模型属性绑定到方法参数上。与SimpleFormController的onSubmit()方法不同,你必须亲自执行表单验证,并决定是呈现

表单视图琮是成功视图。表单提交处理成功之后,调用SessionStatus的setComplete()方法,从会话中清除命令对象.当被应用到像populateSportTypes()这样的方法中时,@ModelAttribute注解会将引用数据填充到模型中。这样做的效果与覆盖SimpleFormController的referenceData()方法相同。

添加了@InitBinder注解的initBinder()方法将定制的属性编辑器注册到了绑定器对象中。它与SimpleFormController

的ininBinder()方法相对应。

请注意,这个控制器的成功视图是一个重定向到预订成功页面的视图。你可以为该视图创建另一个基于注解的控制器。 

package com.apress.springrecipes.court.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ReservationSuccessController{
	@RequestMapping("/reservationSuccess.htm")
	public String reservationSuccess(){
		return "reservationSuccess";
	}
}

最后,在这个表单控制器生效之前,必须定义一具验证器实例,让Spring进行自动装配。

<bean id="reservationValidator"
	class="com.apress.springrecipes.court.domain.ReservationValidator"/>

为了重用,可以从每个控制器类中提取绑定器初始化任务,形成绑定初始器。

package com.apress.springrecipes.court.web;
...
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.support.WebBindingInitializer;
import org.springframework.web.context.request.WebRequest;
public class ReservationBindingInitializer implements WebBindingInitializer{
	private ReservationService reservationService;
	@Autowired
	public ReservationBindingInitializer(ReservationService reservationService){
		this.reservationService = reservationService;
	}
	public void initBinder(WebDatabinder binder,WebRequest request){
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		dateFormat.setLenient(false);
		binder.registerCustomEditor(Date.class,new CustomDateEditor(
			dateFormat,true));
		binder.registerCustomEditor(SportTupe.class,new SportTypeEditor(
			reservationService));
	}
}	

 然后为AnnotationMethodHandlerAdapter指定这个绑定初始器,以便所有的处理程序方法都可以共用相同的属性编辑器。  

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	<property name="webBindingInitializer">
		<bean class="com.apress.springrecipes.court.web.ReservationBindingInitializer"/>
	</property>
</bean>

现在可以删除ReservationFormController中的initBinder()方法,因为绑定喊叫已经能在每个基于注解的控制器中共享了。 

 

 

 

 

分享到:
评论

相关推荐

    Spring3MVC注解教程.ppt

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

    Spring+Spring mvc+Hibernate+Bootstrap、企业级员工信息管理系统

    后台通过自定义注解结合一个访问拦截器实现整个系统的权限控制 04. 系统前台采用全采用的Html+jQuery开发 05. 系统前台与后台的交互全部使用 Ajax 异步请求 06. 自定义 SecureValid 注解实现权限的控制 07. ...

    全面掌握Spring MVC:从基础到高级的实践指南

    在Spring MVC中,DispatcherServlet作为前端控制器,负责请求的接收和响应结果的处理。处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter)是核心组件,负责找到和调用适当的处理器(Controller)。 ...

    整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用-Java EE企业级应用开发学习记录(第十天)

    2. 注解开发: 我们将深入讨论如何使用注解来配置和管理Spring容器、控制器、服务层和数据访问层。注解开发可以显著简化配置,并提高代码的可读性。 3. 整合配置: 我们将演示如何将Spring、Spring MVC和MyBatis进行...

    21道Java Spring MVC综合面试题详解含答案(值得珍藏)

    Spring MVC支持注解,可以简化开发。 作为Spring的一部分,能够使用Spring框架的IOC容器和Aop编程。 方便整合Struts、MyBatis、Hibernate、JPA等其他框架。 强化注解的使用,在控制器、Service、Dao都可以使用注解,...

    Spring3_MVC注解教程

    参考《Spring3.x企业应用开发实战》springMVC框架结构简介、 HTTP请求地址映射、数据转换、数据模型控制、视图及解析器

    Spring MVC 3.0实战指南.ppt

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

    Spring Web MVC入门教程

    第三章:注解式控制器开发详解 包括:注解式开发HelloWorld、处理器定义、请求映射、REST风格支持、请求数据映射、数据绑定等诸多内容 第四章:数据类型转换 包括:简介、内建类型转换器、自定义类型转换器等 第五...

    Spring+MVC+Mybatis 书城项目

    Spring MVC: Spring MVC是Spring框架的一个模块,它实现了MVC(模型-视图-控制器)设计模式,用于构建Web应用。Spring MVC允许你将应用的逻辑、数据和用户界面分离,使得代码更加清晰和易于维护。 MyBatis: MyBatis...

    基于java的企业级应用开发:Spring MVC的核心类和注解.ppt

    * * * * Spring MVC的核心类和注解 请输入您的部门/机构名称 12.1 DispatcherServlet DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充当着前端控制器的角色。...

    Java之Spring Boot详解

    (2)在 web.xml 文件中配置 Spring mvc 的前端控制器 (3)创建一个 spring mvc 的配置文件 (4)在 spring mvc 的配置文件中进行相关配置   1) 配置注解扫描路径   2)配置处理器映射器   3)配置处理器...

    Spring MVC 3.0实战指南--陈雄华

    Spring MVC 3.0新特性: 1.支持REST风格的URL 2.添加更多注解,可完全注解驱动 ...5.更加灵活的控制器方法签名,可完全独立于Servlet API 参考《Spring 3.x企业应用开发实战》的第15章撰写的培训材料

    基于jwt的权限控制框架,支持与Spring Boot配合使用,支持Spring MVC与WebFlux

    ,Spring Web编程模型,基于权限配置的方式:核心是1个拦截器,基于注解的权限控制:核心是1个切面,WebFlux编程模型,基于权限配置的方式:核心是1个过滤器,基于注解的权限控制:核心是1个切面

    spring2.5.chm帮助文档(中文版)

    Spring Framework 开发参考手册 目录 1. 简介 1.1. 概览 1.1.1. 使用场景 2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 ...2.5.3. 基于Annotation的控制器 ......

    编程语言+JAVAspring+MVC框架+Web开发

    编程语言+JAVAspring+MVC框架+...它介绍了JAVAspring的MVC框架的概念、原理和作用,以及如何使用JAVAspring的MVC框架来开发Web应用,包括控制器、模型、视图、拦截器、异常处理等内容,以及一些配置文件和注解的用法。

    (第十一天)初识SpringMVC SSM框架的学习与应用-Java EE企业级应用开发学习记录

    Spring MVC简介: 我们将介绍Spring MVC框架的基本概念,包括控制器、模型、视图以及它们之间的协作。您将了解为什么Spring MVC是一个流行的Java Web框架,以及它的主要特点。 项目结构: 我们将展示一个标准的...

    基于SSM框架(SpringMVC + Spring + Mybatis)的图书管理系统,内附,教程,数据库脚本

    1 此系统采用了目前最流行的ssm框架,其中的spingMVC框架相对于struts2框架更灵活,更安全。 2 本项目springMVC框架采用了注解映射器,使用了...5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。

    Spring 2.0 开发参考手册

    16.1.1. 控制器 - MVC中的C 16.1.2. 视图 - MVC中的V 16.1.3. Web作用范围的Bean 16.2. DispatcherPortlet 16.3. ViewRendererServlet 16.4. 控制器 16.4.1. AbstractController和PortletContentGenerator ...

    SpringMVC笔记.zip

    SpringMVC 是一种基于 Java 的实现 MVC 设计...它通过一套注解, 让一个简单的 Java 类成为处理请求的控制器, 而无须实现任何接口。 同时它还支持RESTful 编程风格的请求。 本文档包含SpringMVC的课件笔记与学习标注。

Global site tag (gtag.js) - Google Analytics