【Spring学习笔记-MVC-10】Spring MVC之数据校验
1.准备


<?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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><!-- 扫描web包,应用Spring的注解 --><context:component-scan base-package="com.ll.web"/><!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面,默认优先级最低 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"p:viewClass="org.springframework.web.servlet.view.JstlView"p:prefix="/jsp/"p:suffix=".jsp" /><!-- 设置数据校验、数据转换、数据格式化 --><mvc:annotation-driven validator="validator" conversion-service="conversionService"/><!-- 数据转换/数据格式化工厂bean --><bean id="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean" /><!-- 设置校验工厂bean-采用hibernate实现的校验jar进行校验-并设置国际化资源显示错误信息 --><bean id="validator"class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><property name="providerClass" value="org.hibernate.validator.HibernateValidator" /><!--不设置则默认为classpath下的 ValidationMessages.properties --><property name="validationMessageSource" ref="validatemessageSource" /></bean><!-- 设置国际化资源显示错误信息 --><bean id="validatemessageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><property name="basename"><list><value>classpath:valideMessages</value></list></property><property name="fileEncodings" value="utf-8" /><property name="cacheSeconds" value="120" /></bean></beans>

package com.ll.model;import java.util.Date;import javax.validation.constraints.DecimalMax;import javax.validation.constraints.DecimalMin;import javax.validation.constraints.Past;import javax.validation.constraints.Pattern;import org.hibernate.validator.constraints.Length;import org.springframework.format.annotation.DateTimeFormat;import org.springframework.format.annotation.NumberFormat;public class Person {@Pattern(regexp="W{4,30}",message="{Pattern.person.username}")private String username;@Pattern(regexp="S{6,30}",message="{Pattern.person.passwd}")private String passwd;@Length(min=2,max=100,message="{Pattern.person.passwd}")private String realName;@Past(message="{Past.person.birthday}")@DateTimeFormat(pattern="yyyy-MM-dd")private Date birthday;@DecimalMin(value="1000.00",message="{DecimalMin.person.salary}")@DecimalMax(value="2500.00",message="{DecimalMax.person.salary}")@NumberFormat(pattern="#,###.##")private long salary;public Person() {super();}public Person(String username, String passwd, String realName) {super();this.username = username;this.passwd = passwd;this.realName = realName;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}public String getRealName() {return realName;}public void setRealName(String realName) {this.realName = realName;}public Date getBirthday() {// DateFormat df = new SimpleDateFormat("yyyy-MM-dd");// return df.format(birthday);return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public long getSalary() {return salary;}public void setSalary(long salary) {this.salary = salary;}@Overridepublic String toString() {return "Person [username=" + username + ", passwd=" + passwd + "]";}}
4. 国际化资源文件



5. 控制层



package com.ll.web;import java.security.NoSuchAlgorithmException;import javax.validation.Valid;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import com.ll.model.Person;/*** @author Administrator**/@Controller@RequestMapping(value = "/test")public class TestController {@ModelAttribute("person")public Person initModelAttr() {Person person = new Person();return person;}/*** 返回主页* @return*/@RequestMapping(value = "/index.action")public String index() {return "regedit";}/*** 1. 在入参对象前添加@Valid注解,同时在其后声明一个BindingResult的入参(必须紧随其后),* 入参可以包含多个BindingResult参数;* 2. 入参对象前添加@Valid注解:请求数据-->入参数据 ===>执行校验;* 3. 这里@Valid在Person对象前声明,只会校验Person p入参,不会校验其他入参;* 4. 概括起来:@Valid与BindingResult必须成对出现,且他们之间不允许声明其他入参;* @param bindingResult :可判断是否存在错误*/@RequestMapping(value = "/FormattingTest")public String conversionTest(@Valid @ModelAttribute("person") Person p,BindingResult bindingResult) throws NoSuchAlgorithmException {// 输出信息System.out.println(p.getUsername() + " " + p.getPasswd() + " "+ p.getRealName() + " " + " " + p.getBirthday() + " "+ p.getSalary());// 判断校验结果if(bindingResult.hasErrors()){System.out.println("数据校验有误");return "regedit";}else {System.out.println("数据校验都正确");return "success";}}}
6. 前台
引入Spring的form标签:

在前台显示错误:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %><html><head><title>数据校验</title><style>.errorClass{color:red}</style></head><body><form:form modelAttribute="person" action='FormattingTest.action' ><form:errors path="*" cssClass="errorClass" element="div"/><table><tr><td>用户名:</td><td><form:errors path="username" cssClass="errorClass" element="div"/><form:input path="username" /></td></tr><tr><td>密码:</td><td><form:errors path="passwd" cssClass="errorClass" element="div"/><form:password path="passwd" /></td></tr><tr><td>真实名:</td><td><form:errors path="realName" cssClass="errorClass" element="div"/><form:input path="realName" /></td></tr><tr><td>生日:</td><td><form:errors path="birthday" cssClass="errorClass" element="div"/><form:input path="birthday" /></td></tr><tr><td>工资:</td><td><form:errors path="salary" cssClass="errorClass" element="div"/><form:input path="salary" /></td></tr><tr><td colspan="2"><input type="submit" name="提交"/></td></tr></table></form:form></body></html>
7. 测试



附件列表
【Spring学习笔记-MVC-10】Spring MVC之数据校验的更多相关文章
- 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- 【Spring学习笔记-MVC-7】Spring MVC模型对象-模型属性讲解
作者:ssslinppp 来自为知笔记(Wiz) 附件列表 处理模型数据.png
- 【Spring学习笔记-MVC-14】Spring MVC对静态资源的访问
作者:ssslinppp 参考链接: http://www.cnblogs.com/luxh/archive/2013/03/14/2959207.html http://www.cnb ...
- 【Spring学习笔记-MVC-16】Spring MVC之重定向-解决中文乱码
概述 spring MVC框架controller间跳转,需重定向,主要有如下三种: 不带参数跳转:形如:http://localhost:8080/SpringMVCTest/test/myRedi ...
- 【Spring学习笔记-MVC-15】Spring MVC之异常处理
作者:ssslinppp 1. 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理 ...
- 【Spring学习笔记-MVC-13】Spring MVC之文件上传
作者:ssslinppp 1. 摘要 Spring MVC为文件上传提供了最直接的支持,这种支持是通过即插即用的MultipartResolve实现的.Spring使用Jakarta Co ...
- 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver
场景 当我们设计程序界面的时候,中国人希望界面是中文,而美国人希望界面是英文. 我们当然希望后台代码不需改变,系统能够通过配置文件配置,来自己觉得是显示中文界面还是英文界面. 这是,Spring mv ...
- Spring学习笔记 7.1 Spring MVC起步
7.1.1 跟踪Spring MVC的请求请求首先到达DispatcherServlet(DispatcherServlet是Spring MVC中的前端控制器):DispatcherServlet的 ...
随机推荐
- 利用express.js连接mongodb数据库
var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = "mongodb://localhost:27017/ ...
- James Whittaker:经营成功的测试职业生涯
转注:这篇文章出自 James A. Whittaker,Google的工程总监,负责Google部分产品的测试,包括Chrome.地图.GoogleWebApp.在加盟Google之前,James在 ...
- Vue面试题整理
1:什么是MVVM MVVM是是Model-View-ViewModel的缩写,Model代表数据模型,定义数据操作的业务逻辑,View代表视图层,负责将数据模型渲染到页面上,ViewModel通过双 ...
- 使用MyEclipse将HTML5移动项目迁移到PhoneGap(三)
MyEclipse开年钜惠 在线购买低至75折!立即开抢>> [MyEclipse最新版下载] 三.将图像从HTML5项目复制到PhoneGap项目 1. 在PhoneGap项目的www ...
- \n,\r,\t
etF首先说说\n,\r,\t \n 软回车: 在Windows 中表示换行且回到下一行的最开始位置 在Linux.unix 中只表示换行,但不会回到下一行的开始位置. \r 软空格: 在Linux. ...
- iOS-----推送机制(上)
推 送 机 制 使用NSNotificationCenter通信 NSNotificationCenter实现了观察者模式,允许应用的不同对象之间以松耦合的方式进行通信. NSNotification ...
- [LeetCode&Python] Problem 669. Trim a Binary Search Tree
Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that a ...
- 多名历年高考状元最终选择做中国顶尖黑客 - imsoft.cnblogs
原标题:揭秘中国顶尖黑客:二分之一是历年高考[微博]状元 “二分之一是各地的历年高考状元,二分之一是数学专业,二分之一来自微软.” Keen这样的团队是坚决与黑产划清界限的,这也是圈内的“道德洁癖”, ...
- 20155201 2016-2017-2 《Java程序设计》第七周学习总结
20155201 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十二章 Lambda Lamdba表达式 例如 Comparator<String& ...
- BZOJ1071: [SCOI2007]组队【双指针】【思维好题】
Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...