1.首先來一個項目結構圖以及所需jar包
可以看到,沒有添加除了日志和jstl相關的jar包外,沒有其他spring以外的第三方jar包(即使用的是spring自帶的校驗框架)。
2.從前臺頁面開始,首先是接收用戶信息的表單loginform.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<%@ 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> <h3>登錄頁</h3> <!-- 綁定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
1
2
3
4
5
|
public class user { private string loginname; private string password; //省略set和get方法… } |
4.控制器usercontroller.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
@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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
//實現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,然后就是啟動服務器運行程序…
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/Satisfy_555/article/details/79816971