Spring中使用JSR303进行数据校验

刚做完spring的Validator校验,紧接着做spring的JSR303校验,做完后发现差别不是非常大。废话不说,先来项目结构和jar包

1.项目结构和jar包

Spring中使用JSR303进行数据校验_第1张图片Spring中使用JSR303进行数据校验_第2张图片

2.注册页registerForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>




测试JSR303






注册页面


















































登录名:
密码:
用户名:
年龄:
邮箱:
生日:
电话:




 

3.实体类User.java 

package org.fkit.domain;

import java.util.Date;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;
 

public class User {

 

@NotBlank(message="登录名不能为空")
private String loginname;

@NotBlank(message="密码不能为空")
@Length(min=6,max=8,message="密码长度必须在6~8位之间")
private String password;

@NotBlank(message="用户名不能为空")
private String username;

@Range(min=15,max=60,message="年龄必须在15~60岁之间")
private int age;

@Email(message="必须是合法的邮箱地址")
private String email;

@DateTimeFormat(pattern="yyyy-mm-dd")
private Date birthday;

@Pattern(regexp="[1][3,8][3,6,9][0-9]{8}",message="无效的电话号码")
private String phone;

//省略set和get方法…
 

}

 

4.控制器UserController.java

package org.fkit.controller;

import javax.validation.Valid;
import org.fkit.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class UserController {

@RequestMapping(value="/{formName}")

public String loginForm(@PathVariable String formName,Model model){

                /**
* 这里要注意的是,因为jsp页面中绑定了名为user 的对象,
* 所以我们必须在这里提供一个User对象并放在域中,否则会报IllegalStateException异常,下同。
* */

User user = new User();
model.addAttribute("user", user);
//动态跳转页面
return formName;
}

//数据校验使用@Valid,后面跟着Errors对象保存校验信息
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(@Valid @ModelAttribute User user,
Errors errors,Model model) {
//如果errors中有错, 则返回注册页
if(errors.hasErrors()) {
return "registerForm";
}

//否则跳转到成功页
model.addAttribute("user", user);
return "success";
}

}

 

5.成功页success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




测试JSR303


测试JSR303


登录名:${requestScope.user.loginname }

密码:${requestScope.user.password }

用户名:${requestScope.user.username }

年龄:${requestScope.user.age }

邮箱:${requestScope.user.email }

生日:${requestScope.user.birthday }

电话:${requestScope.user.phone }

 

6.配置文件

springmvc-config.xml


   xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.2.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
       http://mybatis.org/schema/mybatis-spring
       http://mybatis.org/schema/mybatis-spring.xsd">











/WEB-INF/content/



.jsp


 

 

 

web.xml



  JSR303Test
  
 
 
    springmvc
   
        org.springframework.web.servlet.DispatcherServlet
   

   
      contextConfigLocation
      classpath:spring/springmvc-config.xml
   

    1
 

  
 
 
    springmvc
    /
 

  
 
 
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
UTF-8

 


characterEncodingFilter
/*

 

 

 

小结:只要细心点,然后跟着书上来,理论上是不会错了。这次的代码中我遇到了一个错误:

Caused by: java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider

去网上查了一下,说的是包不匹配,具体如下:

Spring中使用JSR303进行数据校验_第3张图片

所以呢, 遇到错误,如果没有思路,那么马上百度才是最省时间的做法。

================================================================

================================================================

以下是用maven进行实现相同的功能。

首先看一下项目结构:

Spring中使用JSR303进行数据校验_第4张图片Spring中使用JSR303进行数据校验_第5张图片

-------------------------------------------------------

2.由于是一个例子,所以其代码可以说完全一样,只不过jar包交由maven管理罢了。

pom.xml


  4.0.0
  com.lin
  JSR303_MavenTest
  0.0.1-SNAPSHOT
  war
  
    
      
        
      
        org.springframework  
        spring-core  
        4.2.0.RELEASE  
      
      
      
        org.springframework  
        spring-webmvc  
        4.2.0.RELEASE  
      
      
      
    
	
	    org.hibernate
	    hibernate-validator
	    5.2.4.Final
	 
	
	
    
      
  	
	
	    javax.servlet
	    jstl
	    1.2
	
	
	    taglibs
	    standard
	    1.1.2
	
	
     
    
    

    
    
    
      
      
          
            org.apache.maven.plugins  
            maven-compiler-plugin  
              
                1.8  
                1.8  
                UTF-8  
              
          
          
            
            org.apache.tomcat.maven    
            tomcat7-maven-plugin    
            2.1    
          
      
    
  

----------------------------------------------------------------------------

其他重复代码不再粘贴,项目依旧可以跑得起来……(今天来复用代码的时候出现了点问题,上面测试的环境是jdk1.8+tomcat8.5。。。然后我今天用公司的jdk1.7+tomcat7.0就跑不动。目前猜测是tomcat的问题。。。)

 

你可能感兴趣的:(Spring框架)