十六、表单的验证(使用Hibernate-validate)SpringMVC ValidFormInput

//---------------------------------------------------------------------------
// 1/4

package test.SpringMVC;
//D:\Indigo_workspace2\HiSpringMVC\src\test\SpringMVC\formController.java
import java.util.Map;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


@Controller
@RequestMapping("/form")
public class formController {
    
    //http://localhost:8080/HiSpringMVC/form/add
    @RequestMapping(value="/add",method=RequestMethod.POST)    
    public String add(@Valid User u,BindingResult br){
        if(br.getErrorCount()>0){
            return "addUser";
        }
        return "showUser";
    }
    
    //http://localhost:8080/HiSpringMVC/form/add
    @RequestMapping(value="/add",method=RequestMethod.GET)
    public String add(Map<String,Object> map){
        map.put("user",new User());
        return "addUser";
    }
}


//---------------------------------------------------------------------
/*
validation-api-1.1.0.Final.jar
classmate-1.2.0.jar
hibernate-validator-5.2.4.Final.jar
hibernate-validator-annotation-processor-5.0.1.final.jar
jboss-logging-3.1.3.GA.jar
*/
// 2/4
package test.SpringMVC;
//D:\Indigo_workspace2\HiSpringMVC\src\test\SpringMVC\User.java
import java.util.Date;

import javax.validation.constraints.Past;

import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;

public class User {

    private int id;
    private int age;
    private String city;    
    @NotEmpty
    private String name;    
    @Past //ps:@Past表示时间必须是一个过去值
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date birthday;
    
    //vvvvvvvvvvvvvvvvvvvvvv
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", birthday=" + birthday + "]";
    }
    //^^^^^^^^^^^^^^^^^^^^^^
    
    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public User(){
        System.out.println("User()");
    }
    
    public User(String name,int age){
        this.name= name;
        this.age= age;
    }
    
    public User(String name,int age, Date birthday){
        this.name= name;
        this.age= age;
        this.birthday=birthday;
    }
    
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("setName(name) ");
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
        System.out.println("setAge(age)");
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }


    
    
}

//--------------------------------------------------------------
// 3/4
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>       
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>D:\Indigo_workspace2\HiSpringMVC\WebContent\WEB-INF\jsp\showUser.jsp</title>
</head>
<body>
showUser:<br/>
<c:set var="user"  value="${requestScope.user}"  />
${user.id }-${user.name }-[${user.birthday }]<br/>
<br/>
</body>
</html>

//-----------------------------------------------------------
// 4/4
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>   
// <%@ taglib prefix="struts" uri="/struts-tags" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>D:\Indigo_workspace2\HiSpringMVC\WebContent\WEB-INF\jsp\addUser.jsp</title>
</head>
<body>

<form:form action="/HiSpringMVC/form/add" method="post" modelAttribute="user">
        id:<form:input path="id"/><form:errors path="id"/><br>
        name:<form:input path="name"/><form:errors path="name"/><br>
        birth:<form:input path="birthday"/><form:errors path="birthday"/>
        <input type="submit" value="submit">
</form:form> 
    
</body>
</html>

十六、表单的验证(使用Hibernate-validate)及国际化

https://www.cnblogs.com/sunniest/p/4555801.html

1.导入Hibernate-validate需要的jar包

(未选中不用导入)

2.编写实体类User并加上验证注解

复制代码
public class User {
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirth() {
        return birth;
    }
    public void setBirth(Date birth) {
        this.birth = birth;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", birth=" + birth + "]";
    }    
    private int id;
    @NotEmpty
    private String name;

    @Past
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date birth;
}
复制代码

ps:@Past表示时间必须是一个过去值

3.在jsp中使用SpringMVC的form表单

复制代码
    <form:form action="form/add" method="post" modelAttribute="user">
        id:<form:input path="id"/><form:errors path="id"/><br>
        name:<form:input path="name"/><form:errors path="name"/><br>
        birth:<form:input path="birth"/><form:errors path="birth"/>
        <input type="submit" value="submit">
    </form:form> 
复制代码

ps:path对应name

4.Controller中代码

复制代码
@Controller
@RequestMapping("/form")
public class formController {
    @RequestMapping(value="/add",method=RequestMethod.POST)    
    public String add(@Valid User u,BindingResult br){
        if(br.getErrorCount()>0){            
            return "addUser";
        }
        return "showUser";
    }
    
    @RequestMapping(value="/add",method=RequestMethod.GET)
    public String add(Map<String,Object> map){
        map.put("user",new User());
        return "addUser";
    }
}
复制代码

ps:

  1.因为jsp中使用了modelAttribute属性,所以必须在request域中有一个"user".

  2.@Valid 表示按照在实体上标记的注解验证参数

  3.返回到原页面错误信息回回显,表单也会回显

5.错误信息自定义

在src目录下添加locale.properties

NotEmpty.user.name=name can't not be empty
Past.user.birth=birth should be a past value
DateTimeFormat.user.birth=the format of input is wrong
typeMismatch.user.birth=the format of input is wrong
typeMismatch.user.id=the format of input is wrong

在SpringMVC配置文件中配置

    <!-- configure the locale resource -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="locale"></property>
    </bean>

6.国际化显示

在src下添加locale_zh_CN.properties

username=账号
password=密码

locale.properties中添加

username=user name
password=password

创建一个locale.jsp

  <body>
    <fmt:message key="username"></fmt:message>
    <fmt:message key="password"></fmt:message>
  </body>

在SpringMVC中配置

    <!-- make the jsp page can be visited -->
    <mvc:view-controller path="/locale" view-name="locale"/>

让locale.jsp在WEB-INF下也能直接访问

最后,访问locale.jsp,切换浏览器语言,能看到账号和密码的语言也切换了

 

posted @ 2018-01-12 15:07  sky20080101  阅读(139)  评论(0)    收藏  举报