dictionary magento layout syntax node tree cocos2d html5 LimeJS jq第一个子元素 hadoop特点 excel动态图表制作 css选择器有几种 查看mysql密码 mysql自然连接 python练习 mysql函数 后台管理网站模板 python数据 python函数返回 java变量 jdbc连接mysql java怎么配置环境变量 java架构 java注释规范 java绝对值 javalist数组 php实例教程 qq免安装 vfloppy 橄榄山快模 联发科mt6750 显示器面板类型 java获取时间戳 mac强制重启 幽灵行动多少钱 mmap文件怎么打开 omg小北 日志软件 淘宝图片下载器 ps渐变工具在哪里
当前位置: 首页 > 学习教程  > 编程语言

SpringMVC学习笔记之二

2020/7/24 9:07:25 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

这里写目录标题

        • 1.CRDU示例
        • 2.使用Spring的表单标签
        • 3.SpringMVC处理静态资源
        • 4.删除实体类功能的实现
        • 5.修改用户信息案例
        • 6.数据绑定流程
        • 7.自定义类型转换器
        • 8.关于mvc:annotation-driven
        • 9.@InitBinder
        • 10.数据格式化
        • 11.Spring MVC调用流程
        • 12.如何进行数据校验?

1.CRDU示例

功能1:显示所有的员工信息
1.加入jar包
2.配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<!-- 配置 SpringMVC 的 DispatcherServlet -->
	<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
	<servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
		<!-- 配置 HiddenHttpMethodFilter: 把 POST 请求转为 DELETE、PUT 请求 -->
	<filter>
		<filter-name>HiddenHttpMethodFilter</filter-name>
		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
	</filter>	
	<filter-mapping>
		<filter-name>HiddenHttpMethodFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

3.在src下面配置springMVC配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
	<!-- 配置自动扫描的包 -->
	<context:component-scan base-package="com.atguigu.springmvc"></context:component-scan>
	<!-- 配置视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>		
</beans>

4.拦截代码如下:

@Controller
public class EmployeeHandler {
	@Autowired
	private EmployeeDao employeeDao;
	@RequestMapping("/emps")
	public String list(Map<String,Object> map) {
		map.put("employees",employeeDao.getAll());
		return "list";
	}
}

5.显示的jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:if test="${empty requestScope.employees }">
		没有任何员工信息。
	</c:if>
	<c:if test="${!empty requestScope.employees }">
		<table border="1" cellpadding="10" cellspacing="0">
			<tr>
				<th>ID</th>
				<th>LastName</th>
				<th>Email</th>
				<th>Gender</th>
				<th>Department</th>
				<th>Edit</th>
				<th>Delete</th>
			</tr>
			<c:forEach items="${requestScope.employees}" var="emp">
				<tr>
					<td>${emp.id }</td>
					<td>${emp.lastName }</td>
					<td>${emp.email }</td>
					<td>${emp.gender==0?'Female':'Male' }</td>
					<td>${emp.department.departmentName }</td>
					<td><a href="">Edit</a></td>
					<td><a href="">Delete</a></td>
				</tr>
			</c:forEach>
		</table>
	</c:if>
</body>
</html>

2.使用Spring的表单标签

通过SpringMVC的表单标签可以实现将模型数据中的属性和HTML表达元素相绑定,以实现表单数据更便捷编辑和表单值的回显
form标签
1.一般情况下,通过GET请求获取表单页面,而通过POST请求提交表单页面,因此获取表单页面和提交表单页面的URL是相同的。只要满足该最佳条件的契约,form:form标签就无需通过action属性指定表单提交的URL
2.可以通过modelAttribute属性指定绑定的模型属性,若没有指定该属性,则默认从request域对象中读取command的表单bean,如果该属性值也不存在,则会放生错误。
3.SpringMVC提供了多个表单组件标签,如form:input/form:select/等,用以绑定表单字段的属性值,它们的共有属性如下:
–path:表单字段,对应html元素的name属性,支持级联属性
–htmlEscape:是否对表单值的HTML特殊字符进行转换,默认值为true
–cssClass:表单组件对应的CSS样式类名
–cssErrorClass:表单组件的数据存在错误时,采取的CSS样式
–form:input、form:password、form:hidden、form:textarea:对应HTML表单的text、password、hidden、textarea标签
-form:radiobutton:单选框组件标签,当表单bean对应的属性值和value值相等时,单选框被选中
-form:radiobuttons:单选框组标签,用于构造多个单选框
items:可以是一个List、String[]或Map
itemValue:指定radio的value值。可以是集合中bean的一个属性值
itemLabel:指定radio的label值
delimiter:多个单选框可以通过delimiter指定分隔符
form:checkbox:复选框组件。用于构造单个复选框
form:checkboxs:用于构造多个复选框。使用方式同form:radiobuttons标签
form:select:用于构造下拉框组件。使用方式同form:radiobuttons标签
form:option:下拉框选项组件标签。使用方式同form:radiobuttons标签
form:errors:显示表单组件或数据校验所对应的错误
<form:errorspath=“” />:显示表单所有的错误
<form:errorspath= “user
”/>:显示所有以user为前缀的属性对应的错误
<form:errorspath= “username”/>:显示特定表单对象属性的错误
例子:
代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form:form action="emp" method="POST" modelAttribute="employee">
		LastName:<form:input path="LastName"/>
		<br>
		Email:<form:input path="email"/>
		<br>
		<%
			Map<String,String> genders=new HashMap();
			genders.put("1","Male");
			genders.put("0","Female");
			request.setAttribute("genders",genders);
		%>
		Gender:<form:radiobuttons path="gender" items="${genders}"/>
		<br>
		Department:<form:select path="department.id"
			items="${departments}" itemLabel="departmentName" itemValue="id"></form:select>
		<br>
		<input type="submit" value="Submit">
	</form:form>
</body>
</html>

处理代码如下:

@RequestMapping(value="emp",method=RequestMethod.GET)
	public String input(Map<String,Object> map) {
		map.put("departments",departmentDao.getDepartments());
		map.put("employee",new Employee());
		return "input";
	}

添加的处理代码如下:

@RequestMapping(value="/emp",method=RequestMethod.POST)
	public String save(Employee employee) {
		employeeDao.save(employee);
		return "redirect:/emps";
	}

3.SpringMVC处理静态资源

1.为什么会出现请求资源处理失败?
优雅的REST风格的资源URL不希望带.html或.dao等后缀
若将DispatcherServlet请求映射配置为/,则SpringMVC将捕获WEB容器的所有请求,包括静态资源的请求,SpringMVC会将他们当成一个普通请求处理,因找不到对应处理器将导致错误。
2.解决办法:
在配置文件中配置
<mvc:default-servlet-handler/>:将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,它会对进入DispatcherServlet的请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由WEB应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理
一般WEB应用服务器默认的Servlet的名称都是default。若所使用的WEB服务器的默认Servlet名称不是default,则需要通过default-servlet-name属性显式指定

<mvc:defalut-servlet-handler/>

4.删除实体类功能的实现

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="scripts/jquery-1.9.1.min.js">	</script>
<script type="text/javascript">
	$(function(){
			$(".delete").click(function(){
					var href=$(this).attr("href");
					$("form").attr("action",href).submit();
					return false;
				});
		});
</script>
<title>Insert title here</title>
</head>
<body>
	<form action="" method="POST">
	<!--修改为post请求-->
		<input type="hidden" name="_method" value="DELETE">
	</form>
	<c:if test="${empty requestScope.employees }">
		没有任何员工信息。
	</c:if>
	<c:if test="${!empty requestScope.employees }">
		<table border="1" cellpadding="10" cellspacing="0">
			<tr>
				<th>ID</th>
				<th>LastName</th>
				<th>Email</th>
				<th>Gender</th>
				<th>Department</th>
				<th>Edit</th>
				<th>Delete</th>
			</tr>
			<c:forEach items="${requestScope.employees}" var="emp">
				<tr>
					<td>${emp.id }</td>
					<td>${emp.lastName }</td>
					<td>${emp.email }</td>
					<td>${emp.gender==0?'Female':'Male' }</td>
					<td>${emp.department.departmentName }</td>
					<td><a href="">Edit</a></td>
					<td><a class="delete" href="emp/${emp.id }">Delete</a></td>
				</tr>
			</c:forEach>
		</table>
	</c:if>
	<br><br>
	<a href="emp">Add New Employee</a>
</body>
</html>

web.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xmlns="http://java.sun.com/xml/ns/javaee" 
		xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
		id="WebApp_ID" version="3.0">
	<servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<filter>
		<filter-name>HiddenHttpMethodFilter</filter-name>
		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>HiddenHttpMethodFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

springmvc.xml中文件的实现

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!--确保可以访问资源-->
	<mvc:default-servlet-handler/>
	<!--确保request资源可以用-->
	<mvc:annotation-driven></mvc:annotation-driven>
	<context:component-scan base-package="com.atguigu.springmvc"></context:component-scan>
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

测试代码如下:

@RequestMapping(value="/emp/{id}",method=RequestMethod.DELETE)
public String delete(@PathVariable("id")Integer id) {
	employeeDao.delete(id);
	return "redirect:/emps";
}

5.修改用户信息案例

页面配置如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form:form action="${pageContext.request.contextPath}/emp" method="POST" modelAttribute="employee">
	<c:if test="${employee.id==null }">
		LastName:<form:input path="LastName"/>
	</c:if>
	<c:if test="${employee.id!=null }">
		<form:hidden path="id"/>
		<input type="hidden" name="_method" value="PUT">
	</c:if>
		<br>
		Email:<form:input path="email"/>
		<br>
		<%
			Map<String,String> genders=new HashMap();
			genders.put("1","Male");
			genders.put("0","Female");
			request.setAttribute("genders",genders);
		%>
		Gender:<form:radiobuttons path="gender" items="${genders}"/>
		<br>
		Department:<form:select path="department.id"
			items="${departments}" itemLabel="departmentName" itemValue="id"></form:select>
		<br>
		<input type="submit" value="Submit">
	</form:form>
</body>
</html>

修改涉及到的方法如下:

@ModelAttribute
	public void getEmployee(@RequestParam(value="id",required=false) Integer id,
			Map<String,Object> map) {
		if(id!=null) {
			map.put("employee",employeeDao.get(id));
		}
	}
	@RequestMapping(value="/emp",method=RequestMethod.PUT)
	public String update(Employee employee) {
		employeeDao.save(employee);
		return "redirect:/emps";
	}

6.数据绑定流程

  1. Spring MVC主框架将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象
    2.DataBinder调用装配在Spring MVC上下文中的ConversionService组件进行数据类型转换、数据格式化工作。将Servlet中的请求信息填充到入参对象中
    3.调用Validator组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象
  2. Spring MVC抽取BindingResult中的入参对象和校验错误对象,将它们赋给处理方法的响应入参
    图片1-1
    Spring MVC上下文中内建了很多转换器,可完成大多数Java类型的转换工作。
    •ConversionServiceconverters =
    –java.lang.Boolean->java.lang.String:org.springframework.core.convert.support.ObjectToStringConverter@f874ca
    –java.lang.Character->java.lang.Number:CharacterToNumberFactory@f004c9
    –java.lang.Character->java.lang.String:ObjectToStringConverter@68a961
    –java.lang.Enum->java.lang.String:EnumToStringConverter@12f060a
    –java.lang.Number->java.lang.Character:NumberToCharacterConverter@1482ac5
    –java.lang.Number->java.lang.Number:NumberToNumberConverterFactory@126c6f
    –java.lang.Number->java.lang.String:ObjectToStringConverter@14888e8
    –java.lang.String->java.lang.Boolean:StringToBooleanConverter@1ca6626
    –java.lang.String->java.lang.Character:StringToCharacterConverter@1143800
    –java.lang.String->java.lang.Enum:StringToEnumConverterFactory@1bba86e
    –java.lang.String->java.lang.Number:StringToNumberConverterFactory@18d2c12
    –java.lang.String->java.util.Locale:StringToLocaleConverter@3598e1
    –java.lang.String->java.util.Properties:StringToPropertiesConverter@c90828
    –java.lang.String->java.util.UUID:StringToUUIDConverter@a42f23
    –java.util.Locale->java.lang.String:ObjectToStringConverter@c7e20a
    –java.util.Properties->java.lang.String:PropertiesToStringConverter@367a7f
    –java.util.UUID->java.lang.String:ObjectToStringConverter@112b07f……

7.自定义类型转换器

ConversionService是Spring类型转换体系的核心接口。
•可以利用ConversionServiceFactoryBean在Spring的IOC容器中定义一个ConversionService.Spring将自动识别出IOC容器中的ConversionService,并在Bean属性配置及Spring MVC处理方法入参绑定等场合使用它进行数据的转换
可通过ConversionServiceFactoryBean的converters属性注册自定义的类型转换器
Spring定义了3种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactroyBean中:
1.Converter<S,T>:将S类型对象转为T类型对象
2.ConverterFactory:将相同系列多个“同质”Converter封装在一起。如果希望将一种类型的对象转换为另一种类型及其子类的对象(例如将String转换为Number及Number子类
Integer、Long、Double等)对象)可使用该转换器工厂类
3.GenericConverter:会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换
在这里插入图片描述
实例:
对jsp页面进行配置

<form action="testConversionServiceConverer" method="POST">
	Employee:<input type="text" name="employee">
	<input type="submit" value="Submit">
</form>

编写拦截器

@Controller
public class SpringMVCTest {
	@Autowired
	private EmployeeDao employeeDao;
	@RequestMapping("/testConversionServiceConverer")
	public String testConverter(@RequestParam("employee")Employee employee) {
		employeeDao.save(employee);
		return "redirect:/emps";
	}
}

编写转换类型

@Component
public class EmployeeConverter implements Converter<String,Employee>{
	@Override
	public Employee convert(String source) {
		if(source!=null) {
			String[] vals=source.split("-");
			if(vals!=null&&vals.length==4) {
				String lastName=vals[0];
				String email=vals[1];
				Integer gender=Integer.parseInt(vals[2]);
				Department department=new Department();
				department.setId(Integer.parseInt(vals[3]));
				Employee employee=new Employee(null,lastName,email,gender,department);
				System.out.println(source+"--convert--"+employee);
				return employee;
			}
		}
		return null;
	}
}

在spring配置文件中进行配置

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
	<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<ref bean="employeeConverter"/>
			</set>
		</property>
	</bean>

8.关于mvc:annotation-driven

<mvc:annotation-driven/>会自动注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter与ExceptionHandlerExceptionResolver三个bean。
还将提供以下支持:
–支持使用ConversionService实例对表单参数进行类型转换
–支持使用@NumberFormatannotation、@DateTimeFormat注解完成数据类型的格式化
–支持使用@Valid注解对JavaBean实例进行JSR 303验证
–支持使用@RequestBody和@ResponseBody注解
既没有配置<mvc:default-servlet-handler/>也没有配置<mvc:annotation-driven/>
在这里插入图片描述
配置了<mvc:default-servlet-handler/>但没有配置<mvc:annotation-driven/>
在这里插入图片描述
既配置了<mvc:default-servlet-handler/>又配置<mvc:annotation-driven/>
在这里插入图片描述
开发的时候需要加上

9.@InitBinder

由@InitBinder标识的方法,可以对WebDataBinder对象进行初始化。WebDataBinder是DataBinder的子类,用于完成由表单字段到JavaBean属性的绑定
@InitBinder方法不能有返回值,它必须声明为void。
@InitBinder方法的参数通常是是WebDataBinder
配置案例:

@InitBinder
	public void initBinder(WebDataBinder binder) {
		binder.setDisallowedFields("lastName");
	}

测试结果:
在这里插入图片描述

10.数据格式化

对属性对象的输入/输出进行格式化,从其本质上讲依然属于“类型转换”的范畴。
Spring在格式化模块中定义了一个实现ConversionService接口的FormattingConversionService实现类,该实现类扩展了GenericConversionService,因此它既具有类型转换的功能,又具有格式化的功能
FormattingConversionService拥有一个FormattingConversionServiceFactroyBean工厂类,后者用于在Spring上下文中构造前者
FormattingConversionServiceFactroyBean内部已经注册了:
–NumberFormatAnnotationFormatterFactroy:支持对数字类型的属性使用@NumberFormat注解
–JodaDateTimeFormatAnnotationFormatterFactroy:支持对日期类型的属性使用@DateTimeFormat注解
装配了FormattingConversionServiceFactroyBean后,就可以在Spring MVC入参绑定及模型数据输出时使用注解驱动了。mvc:annotation-driven/默认创建的ConversionService实例即为FormattingConversionServiceFactroyBean
@DateTimeFormat注解可对java.util.Date、java.util.Calendar、java.long.Long时间类型进行标注:
–pattern属性:类型为字符串。指定解析/格式化字段数据的模式,如:”yyyy-MM-ddhh:mm:ss”
–iso属性:类型为DateTimeFormat.ISO。指定解析/格式化字段数据的ISO模式,包括四种:ISO.NONE(不使用)–默认、ISO.DATE(yyyy-MM-dd)、ISO.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-ddhh:mm:ss.SSSZ)
–style属性:字符串类型。通过样式指定日期时间的格式,由两位字符组成,第一位表示日期的格式,第二位表示时间的格式:S:短日期/时间格式、M:中日期/时间格式、L:长日期/时间格式、F:完整日期/时间格式、-:忽略日期或时间格式
@NumberFormat可对类似数字类型的属性进行标注,它拥有两个互斥的属性:
–style:类型为NumberFormat.Style。用于指定样式类型,包括三种:Style.NUMBER(正常数字类型)、Style.CURRENCY(货币类型)、Style.PERCENT(百分数类型)
–pattern:类型为String,自定义样式,如patter="#,###";
样例配置文件做如下的配置:

<mvc:default-servlet-handler/>
	<mvc:annotation-driven></mvc:annotation-driven>

bean中做如下的配置:

@Past
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date birth;
	@NumberFormat(pattern="#,###,###.#")
	private Float salary;

测试birth的时候页面会返回如下的错误:
由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请)就是因为用户的输入信息不合法
自定义和系统默认的格式转换器都使用:

<mvc:default-servlet-handler/>
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	<property name="converters">
		<set>
			<ref bean="employeeConverter"/>
		</set>
	</property>
</bean>

可以使用如下拦截器,获得错误信息

@RequestMapping(value="/emp",method=RequestMethod.POST)
public String save(Employee employee,BindingResult result) {
	System.out.println("save:"+employee);
	for(FieldError error:result.getFieldErrors()) {
		System.out.println(error.getField()+":"+error.getDefaultMessage());
	}
	employeeDao.save(employee);
	return "redirect:/emps";
}

11.Spring MVC调用流程

在这里插入图片描述

12.如何进行数据校验?

JSR 303是Java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE6.0中.
JSR 303通过在Bean属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证
在这里插入图片描述
HibernateValidator是JSR 303的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解
在这里插入图片描述
配置过程:
1.需要添加JSR303的jar包
在这里插入图片描述
在这里插入图片描述
2.配置文件

<context:component-scan/>

3.bean对象配置

	@NotEmpty
	private String lastName;
	@Email
	private String email;
	@Past
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date birth;
	@NumberFormat(pattern="#,###,###.#")
	private Float salary;

4.controller代码配置,参数配置@Valid

@RequestMapping(value="/emp", method=RequestMethod.POST)
	public String save(@Valid Employee employee,
			Map<String, Object> map){
		System.out.println("save: " + employee);
		employeeDao.save(employee);
		return "redirect:/emps";
	}

本文链接: http://www.dtmao.cc/news_show_50001.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?