刚做完spring的Validator校验,紧接着做spring的JSR303校验,做完后发现差别不是非常大。废话不说,先来项目结构和jar包
1.项目结构和jar包
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" %>
登录名: | ||
密码: | ||
用户名: | ||
年龄: | ||
邮箱: | ||
生日: | ||
电话: | ||
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"%>
6.配置文件
springmvc-config.xml
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.xml
org.springframework.web.servlet.DispatcherServlet
小结:只要细心点,然后跟着书上来,理论上是不会错了。这次的代码中我遇到了一个错误:
Caused by: java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider
去网上查了一下,说的是包不匹配,具体如下:
所以呢, 遇到错误,如果没有思路,那么马上百度才是最省时间的做法。
================================================================
================================================================
以下是用maven进行实现相同的功能。
首先看一下项目结构:
-------------------------------------------------------
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的问题。。。)