Springmvc之表單驗證


1、需要的相關jar

  這里采用的是hibernate-validator-5.2.4.Final 和validation-api-1.1.0.Final 兩個jar包。Hibernate Validator 是 Bean Validation 的參考實現, Hibernate Validator 提供了 JSR 303 規范中所有內置 constraint 的實現,除此之外還有一些附加的 constraint。使用maven下載代碼如下:

 1 <dependency>
 2     <groupId>javax.validation</groupId>
 3     <artifactId>validation-api</artifactId>
 4     <version>1.1.0.Final</version>
 5 </dependency>
 6 <dependency>
 7     <groupId>org.hibernate</groupId>
 8     <artifactId>hibernate-validator</artifactId>
 9     <version>5.2.4.Final</version>
10 </dependency>
View Code

2、文件的配置

springservlet-config.xml文件配置如下:

 1 <mvc:annotation-driven validator="validator"
 2         conversion-service="conversion-service" />
 3     <bean id="validator"
 4         class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
 5         <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
 6         <property name="validationMessageSource" ref="validatemessageSource" />
 7     </bean>
 8     <bean id="conversion-service"
 9         class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
10     <bean id="validatemessageSource"
11         class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
12         <property name="basename" value="classpath:i18n" />
13         <property name="fileEncodings" value="utf-8" />
14         <property name="cacheSeconds" value="120" />
15     </bean>
View Code

其中<property name="basename" value="classpath:i18n" />是驗證錯誤后提示的消息所在的文件,需要在classpath路徑下添加,也可以自己設置路徑。

3、controller, user和i18n.properties代碼

UserControlelr代碼部分代碼如下:

 1 package org.springframework.samples.myjpetstores.controller;
 2 
 3 import javax.validation.Valid;
 4 
 5 import org.springframework.samples.myjpetstores.io.User;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.ui.ModelMap;
 8 import org.springframework.validation.BindingResult;
 9 import org.springframework.web.bind.annotation.RequestMapping;
10 
11 @Controller
12 public class UserController {
13     @RequestMapping("/login")
14     public String userLogin(@Valid User user, BindingResult result, ModelMap model)
15     {
16         if(result.hasErrors())
17         {
18             return "loginForm";
19         }
20         return "index";
21     }
22 }
View Code

代碼中需要注意的是,@Valid是必須的,只有加上@Valid,才會對傳過來的參數 User類進行驗證,后面必須緊跟着BindingResult result, 其中result是用來存放驗證錯誤信息的,它們之間是不能有任務參數的,是成對出現的,有多少個@Valid,就必須有多少個BindingResult result。

User類代碼

 1 package org.springframework.samples.myjpetstores.io;
 2 
 3 import org.hibernate.validator.constraints.NotEmpty;
 4 
 5 public class User {
 6     @NotEmpty(message="{username.not.empty}")
 7     private String username;
 8     @NotEmpty(message="{password.not.empty}")
 9     private String password;
10     public String getUsername() {
11         return username;
12     }
13     public void setUsername(String username) {
14         this.username = username;
15     }
16     public String getPassword() {
17         return password;
18     }
19     public void setPassword(String password) {
20         this.password = password;
21     }
22     
23 }
View Code

驗證錯誤后的消息文件:i18n.properties

1 username.not.empty=username is required.
2 password.not.empty=password is required.
View Code

其中name.not.empty和@NotEmpty(message="{username.not.empty}")的{}里的名字必須一致。

4、視圖界面

顯示錯誤信息界面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 
 5 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
 6 
 7 <html>
 8 <head>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <title>Insert title here</title>
11 </head>
12 <body>
13     <form:form modelAttribute="user" method="post">
14         <form:errors path="*"></form:errors>
15         <form:errors path="username"></form:errors>
16         <br />
17         <br />
18     </form:form>
19 </body>
20 </html>
View Code

其中需要注意的是<form:form modelAttribute="user" method="post">中的modelAttribute="user"和controller文件里的@Valid @ModelAttribute User user的@ModelAttribute一致,假如@ModelAttribute沒有設置名字,就默認為user,假如寫成@Valid @ModelAttribute("loginUser") User user,則 modelAttribute="loginUser" 否則不能進行數據綁定的。<form:errors path="*"></form:errors>的*表示所有的錯誤信息。<form:errors path="username"></form:errors>表示驗證username的錯誤信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM