2019-03-25 14:02:07 2556瀏覽
今天扣丁學(xué)堂Java培訓(xùn)老師給大家分享一篇關(guān)于Spring自帶的校驗(yàn)框架Validation的使用實(shí)例詳解,首先來一個(gè)項(xiàng)目結(jié)構(gòu)圖以及所需jar包吧。
<%@ 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>測(cè)試validator接口驗(yàn)證</title> </head> <body> <h3>登錄頁(yè)</h3> <!-- 綁定user --> <form:form modelAttribute="user" method="post" action="login"> <table> <tr> <td>登錄名:</td> <td><form:input path="loginname"/></td> <!-- 使用form:errors標(biāo)簽 顯示loginname屬性的錯(cuò)誤信息 --> <td><form:errors path="loginname" cssStyle="color:red"/></td> </tr> <tr> <td>密碼:</td> <td><form:input path="password"/></td> <!-- 使用form:errors標(biāo)簽 顯示password屬性的錯(cuò)誤信息 --> <td><form:errors path="password" cssStyle="color:red"/></td> </tr> <tr> <td><input type="submit"></td> </tr> </table> </form:form> </body> </html>
public class User { private String loginname; private String password; //省略set和get方法… }
@Controller public class UserController { //注入U(xiǎn)serValidator對(duì)象 @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); // 動(dòng)態(tài)跳轉(zhuǎn)頁(yè)面 return formName; } @RequestMapping(value="/login", method=RequestMethod.POST) public String login(@ModelAttribute User user,Model model,Errors errors){ model.addAttribute("user", user); //調(diào)用userValidator的驗(yàn)證方法 userValidator.validate(user, errors); //如果驗(yàn)證不通過跳轉(zhuǎn)到loginForm視圖 if(errors.hasErrors()){ return "loginForm"; } return "success"; } }
//實(shí)現(xiàn)Spring的Validator接口 @Repository("userValidator") public class UserValidator implements Validator{ //該校驗(yàn)器能夠?qū)lazz類型的對(duì)象進(jìn)行校驗(yàn) public boolean supports(Class<?> clazz) { //User指定的class參數(shù)所表示的類或接口是否相同,或是否是其超類的超接口 return User.class.isAssignableFrom(clazz); } //對(duì)目標(biāo)類target進(jìn)行校驗(yàn),并將校驗(yàn)錯(cuò)誤記錄在errors中 public void validate(Object target, Errors errors) { /** *使用ValidationUtils中的一個(gè)靜態(tài)方法rejectIfEmpty()來對(duì) *loginname屬性進(jìn)行校驗(yàn),假若‘loginname'屬性是null或者空字符 *串的話,就拒絕驗(yàn)證通過。 */ ValidationUtils.rejectIfEmpty(errors, "loginname", null,"登錄名不能為空"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", null,"密碼不能為空"); User user = (User) target; if(user.getLoginname().length() > 10){ //使用Errors的rejectValue方法驗(yàn)證 errors.rejectValue("loginname", null, "用戶名不能超過10個(gè)字符"); } if(user.getPassword() != null && !user.getPassword().equals("") && user.getPassword().length() <6){ errors.rejectValue("password", null, "密碼不能小于6位"); } } }
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】 【掃碼進(jìn)入HTML5前端開發(fā)VIP免費(fèi)公開課】
查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>