【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的 ...
随机推荐
- hdu 1159 Common Subsequence (最长公共子序列 +代码)
Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...
- <NET CLR via c# 第4版>笔记 第15章 枚举类型和位标志
15.1 枚举类型 枚举定义的符号是常量值. C#编译器编译时,会用数值替换符号,不再引用定义了符号的枚举类型.可能会出现一些版本问题. Enum.IsDefined(Type enumType, o ...
- spring入门程序编写
1.导入jar包
- 玩转树莓派:OpenHAB的入门(一)
如果你对那些仅仅只是为了控制一盏灯而不得不下载一个特定的App的智能家居感到厌烦,这里有个好消息:OpenHAB可以为你实现最灵活的控制智能家居,OpenHAB是一个成熟的,开源的家庭自动化平台,既可 ...
- ListBox item Sort
将Rss内容读取到Listbox control中, 然后实现按照标题或发布日期进行排序. private void ListItemSort(string type) { if (type == & ...
- eclipse ubuntu error
eclipse cdt :symbol cout can not be solved Preferences -> C/C++ -> Indexer -> Use active bu ...
- opencv-原图基础上添加指定颜色
前言 项目中需要将某些区域使用不同的颜色表示出来,同时能够看到原图作为底色. 代码 #include "opencv2/highgui/highgui.hpp" #include ...
- top command-linux下用top命令查看cpu利用率超过100%
1. 这里显示的所有的cpu加起来的使用率,说明你的CPU是多核,你运行top后按大键盘1看看,可以显示每个cpu的使用率,top里显示的是把所有使用率加起来; 2.查看CPU信息; cat ...
- 安卓手机文件管理器简单横向评比 - imsoft.cnblogs
X-plore文件管理器 个人评价:安卓手机上管理文件的神器,所有文件一览无余,加上自己对软件常用功能的配置,管理文件无比方便.(本人一直使用) Solid文件管理器 个人评价:用户体验真的很 ...
- 通过Servlet设置文件下载
文件下载 1.获取要下载的文件的绝对路径 但是使用getServletContext().getRealPath()方法在不同的服务器上所获得的实现是不一样的 因为项目被打包入.war文件以后就失去了 ...