您好,登錄后才能下訂單哦!
這篇文章主要介紹Spring自帶的校驗框架Validation怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
1.首先來一個項目結構圖以及所需jar包
可以看到,沒有添加除了日志和jstl相關的jar包外,沒有其他spring以外的第三方jar包(即使用的是spring自帶的校驗框架)。
2.從前臺頁面開始,首先是接收用戶信息的表單loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/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>測試validator接口驗證</title> </head> <body> <h4>登錄頁</h4> <!-- 綁定user --> <form:form modelAttribute="user" method="post" action="login"> <table> <tr> <td>登錄名:</td> <td><form:input path="loginname"/></td> <!-- 使用form:errors標簽 顯示loginname屬性的錯誤信息 --> <td><form:errors path="loginname" cssStyle="color:red"/></td> </tr> <tr> <td>密碼:</td> <td><form:input path="password"/></td> <!-- 使用form:errors標簽 顯示password屬性的錯誤信息 --> <td><form:errors path="password" cssStyle="color:red"/></td> </tr> <tr> <td><input type="submit"></td> </tr> </table> </form:form> </body> </html>
3.實體類User.java
public class User { private String loginname; private String password; //省略set和get方法… }
4.控制器UserController.java
@Controller public class UserController { //注入UserValidator對象 @Autowired @Qualifier("userValidator") private UserValidator userValidator; @RequestMapping(value="/{formName}") public String loginForm( @PathVariable String formName,Model model){ User user = new User(); model.addAttribute("user", user); // 動態跳轉頁面 return formName; } @RequestMapping(value="/login", method=RequestMethod.POST) public String login(@ModelAttribute User user,Model model,Errors errors){ model.addAttribute("user", user); //調用userValidator的驗證方法 userValidator.validate(user, errors); //如果驗證不通過跳轉到loginForm視圖 if(errors.hasErrors()){ return "loginForm"; } return "success"; } }
5.校驗器UserValidator.java
//實現Spring的Validator接口 @Repository("userValidator") public class UserValidator implements Validator{ //該校驗器能夠對clazz類型的對象進行校驗 public boolean supports(Class<?> clazz) { //User指定的class參數所表示的類或接口是否相同,或是否是其超類的超接口 return User.class.isAssignableFrom(clazz); } //對目標類target進行校驗,并將校驗錯誤記錄在errors中 public void validate(Object target, Errors errors) { /** *使用ValidationUtils中的一個靜態方法rejectIfEmpty()來對 *loginname屬性進行校驗,假若‘loginname'屬性是null或者空字符 *串的話,就拒絕驗證通過。 */ ValidationUtils.rejectIfEmpty(errors, "loginname", null,"登錄名不能為空"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", null,"密碼不能為空"); User user = (User) target; if(user.getLoginname().length() > 10){ //使用Errors的rejectValue方法驗證 errors.rejectValue("loginname", null, "用戶名不能超過10個字符"); } if(user.getPassword() != null && !user.getPassword().equals("") && user.getPassword().length() <6){ errors.rejectValue("password", null, "密碼不能小于6位"); } } }
6.spring的配置文件和web.xml的配置文件略……
小結:
第一遍敲這個代碼的時候,有著各種各樣的小問題出現,比較多的就是 類所對應的路徑要import對,因為不同的包中可能會有相同名字的類,而此時一不小心就會導錯了包,會給后面的編寫代碼帶來不必要的麻煩。昨天的時候就調試這個小小的demo就花了好久的時間,后來也沒再去管,然后今天有空了又重新敲了一遍代碼,發現沒有問題,直接一次就通過了,然后去對比昨天的代碼發現,是我在第一遍敲代碼的時候把實體類的get和set方法的名字敲錯了(追溯起來的話是寫屬性的時候把屬性名敲錯了,然后get和set方法是自動生成的,后面去修改屬性時導致沒有將相應的set和get方法改正),哎,,,還是太粗心
ok,然后就是啟動服務器運行程序…
以上是“Spring自帶的校驗框架Validation怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。