在之前的案例上面! 引入需要的验证jar包

创建index.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<form action="student/addStudent" method="post">
年龄:<input type="text" name="age"/> ${ageE} <br/>
姓名: <input type="text" name="userName"/>${userNameE}<br/>
电话:<input type="text" name="phone"> ${phoneE}<br/>
<input type="submit" value="新增"/>
</form>
</body>
</html>

对应的Student类

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size; import org.hibernate.validator.constraints.NotBlank; /**
*
* @NotNull 作用在基本数据类型上
* @NotBlank 作用在String上
* @NotEmpty 作用在集合上
* @Min 最小值
* @Max 最大值
* @Size 字符串的长度
* @Pattern 自定义验证规则
*
*/
public class Student { @NotNull(message="年龄不能为空")
@Min(value=0,message="年龄不能低于{value}")
@Max(value=150,message="年龄不能高于{value}")
private Integer age; //年龄
@NotBlank(message="姓名不能为空")
@Size(min=6,max=10,message="长度必须在{min}---{max}之间")
private String userName; //姓名
@NotBlank(message="手机号不能为空")
@Pattern(regexp="^1[345789]\\d{9}$",message="手机格式不正确")
private String phone; //电话 public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Student(Integer age, String userName, String phone) {
super();
this.age = age;
this.userName = userName;
this.phone = phone;
}
public Student() {
super();
} }

对应的controller

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; import sun.util.calendar.BaseCalendar; import cn.bdqn.bean.Student; @Controller
@RequestMapping("/student")
public class StudentController { /**
*
*@Validated :会对student对象中所有标注 注解的属性进行验证!
*BindingResult:如果 验证出现错误 ,就会把错误信息给这个result
*
*result.getFieldError("age").getDefaultMessage()
*获取我们设置的错误 信息!
*
*/
@RequestMapping("/addStudent")
public ModelAndView addStudent(@Validated Student student,BindingResult result) {
System.out.println("进入了 addStudent");
ModelAndView mv=new ModelAndView();
if (result.hasErrors()) { //出现了验证错误
if (result.getFieldError("age")!=null) { //证明age验证有错误
mv.addObject("ageE", result.getFieldError("age").getDefaultMessage());
}
if (result.getFieldError("userName")!=null) { //证明userName验证有错误
mv.addObject("userNameE", result.getFieldError("userName").getDefaultMessage());
}
if (result.getFieldError("phone")!=null) { //证明phone验证有错误
mv.addObject("phoneE", result.getFieldError("phone").getDefaultMessage());
}
mv.setViewName("/index.jsp");
return mv;
}
mv.setViewName("/success.jsp");
return mv;
} }

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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!-- 配置springmvc的组件 -->
<context:component-scan base-package="cn.bdqn.controller"/>
<!-- 开启 注解的方式-->
<mvc:annotation-driven validator="myValidator"/>
<!-- 生成我们的验证器 -->
<bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
</bean> </beans>

SpringMVC10数据验证的更多相关文章

  1. 我这么玩Web Api(二):数据验证,全局数据验证与单元测试

    目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试   一.模型状态 - ModelState 我理解 ...

  2. MVC 数据验证

    MVC 数据验证 前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解.System.ComponentModel.DataAnnotations 一.基础特性 一.Required 必填 ...

  3. kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件

    小菜利用工作之余编写了一款Java小插件,主要是用来验证Web请求的数据,是在服务器端进行验证,不是简单的浏览器端验证. 小菜编写的仅仅是一款非常初级的组件而已,但小菜为它写了详细的说明文档. 简单介 ...

  4. MVC3 数据验证用法之密码验证设计思路

    描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近在公司用mvc做了一个修改密码 ...

  5. jQuery MiniUI开发系列之:数据验证

    在开发应用系统界面时,往往需要进行很多.复杂的数据验证,当填写的数据符合规定,才能提交保存. jQuery MiniUI提供了比较完美的表单数据验证和错误显示的方式. 常见的表单控件,都有一个验证事件 ...

  6. AngularJS快速入门指南14:数据验证

    thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...

  7. atitit.数据验证--db数据库数据验证约束

    atitit.数据验证--db数据库数据验证约束 1. 为了加强账户数据金额的安全性,需要增加验证字段..1 2. 创建帐户1 3. 更改账户2 4. ---code3 5. --fini4 1. 为 ...

  8. MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息

    Asp.net MVC中的提供非常简单易用的数据验证解决方案. 通过System.ComponentModel.DataAnnotations提供的很多的验证规则(Required, StringLe ...

  9. MVC 数据验证[转]

    前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解. 一.基础特性 一.Required 必填选项,当提交的表单缺少该值就引发验证错误. 二.StringLength 指定允许的长度 指 ...

随机推荐

  1. Leetcode: Reverse Integer 正确的思路下-要考虑代码简化

    题目: Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Have ...

  2. C#关于窗体的keysdown事件,无法获取到焦点

    当窗体中包含button之类的控件时,按下方向键时它们会自动获取焦点,导致窗体keysdown事件无法执行.解决方法很简单.将按钮之类控件放到panel容器中控件就无法获取焦点了.这时焦点会在整个窗体 ...

  3. SharePoint ListTemplateType enumeration

    from microsoft http://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.client.listtempla ...

  4. CSS也可以改变图片幅面尺寸

    一般情况下,只有<img />标签中的图片,可以根据宽高设定来改变大小. 比如1024x768的图,我们设width="640",height="480&qu ...

  5. setjmp/longjmp 使用

    C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人都建议不要使用goto语句,因为采用goto语句后,代码维护工作量加大).另外,C语言标准中还提供一种非局部跳转“n ...

  6. 【HDOJ】3242 List Operations

    注意以下数据:[] ++ [][] -- [1,2][1,2] ++ [][] ++ [1][2] ++ [][2,3] -- []结果是[][][1,2][1][2][2,3] /* 3242 */ ...

  7. 【HDOJ】2369 Broken Keyboard

    字符串. #include <cstdio> #include <cstring> ]; ]; int main() { int n, len; int i, j, k, tm ...

  8. Linux目录树

    Linux目录树(directory tree) 分层结构(不同于数据库文件系统),单个文件/目录的最大长度为255个字符,完整路径为4096个字符 特殊的文件系统 文件系统 挂载点 说明 Root ...

  9. bzoj3275

    容易想到是最小割(最大权独立集)然后每个数拆成两个点,不能同时选的之间连边跑最小割,最后答案=总数-mincut/2 因为这样建图将流量变成了原来的两倍 当然这道题更好的建图方法是分成奇数和偶数两个集 ...

  10. Construct Binary Tree from Preorder and Inorder Traversal——LeetCode

    Given preorder and inorder traversal of a tree, construct the binary tree. 题目大意:给定一个二叉树的前序和中序序列,构建出这 ...