欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Struts2講義34

系統 2115 0

8 ? Struts2 輸入校驗

1 章記述的類型轉換異常處理情況其實就筆者認為也可以算是 Struts2 的輸入校驗中的 1 種方式。在記述 Struts2 的核心技術時候,筆者也簡單介紹過一些輸入校驗的 Struts2 的自帶類和方法。現在在本章重新整理一下,將 Struts2 中的所有輸入校驗的使用做個完整而又詳細的介紹。

8.1 ? validate 輸入校驗方式再談

Web 系統項目中有大量的視圖頁面需要用戶自行輸入很多數據。這些數據的類型有很多種。為了防止某些客戶的惡意輸入以及對 Web 項目的惡意破壞。必須引入輸入校驗像 Windows 操作系統中的防火墻一樣把一些“垃圾”數據過濾,擋在 Web 系統之外。

Struts2 的輸入校驗是以上一章的類型轉換為基礎。而且輸入校驗一般和 Web 系統的業務邏輯息息相關。所以在閱讀本章前,筆者建議讀者能仔細參看類型轉換章節。有了堅實的基礎再來閱讀本章。

在前面的章節中筆者也對 Struts2 輸入校驗中最基本的使用 validate 方式做過簡單介紹,本小節再次就這一話題進行討論。

8.1.1 ? 復習 validate 方法進行輸入校驗

技術要點

本節代碼就 1 個簡單的用戶注冊功能具體介紹利用 validate 方法對數字、字符串、日期等類型數據進行輸入校驗方式介紹。

幾種基本 Java 數據類型輸入校驗。

針對具體業務邏輯進行輸入校驗。

演示代碼

使用的 Action 文件:

?

Java代碼 復制代碼
  1. <!------------?文件名:?RegisterAction.java----------------> ??
  2. public ? class ?RegisterAction? extends ?ActionSupport?{ ??
  3. ????????? //?Action?類公用私有變量,用來做頁面導航標志 ??
  4. ????????? private ? static ?String?FORWARD?=? null ?; ??
  5. ??
  6. ????????? //?用戶名屬性 ??
  7. ????????? private ?String?username; ??
  8. ……… ??
  9. ????????? //?年齡屬性 ??
  10. ????????? private ? int ?age; ??
  11. ??
  12. ????????? //?取得用戶名值 ??
  13. ????????? public ?String?getUsername()?{ ??
  14. ??????????????????? return ?username; ??
  15. ?????????} ??
  16. ? ??
  17. ????????? //?設置用戶名值 ??
  18. ????????? public ? void ?setUsername(String?username)?{ ??
  19. ??????????????????? this ?.username?=?username; ??
  20. ?????????} ??
  21. ??
  22. ………………… ??
  23. ??
  24. ????????? //?取得年齡值 ??
  25. ????????? public ? int ?getAge()?{ ??
  26. ??????????????????? return ?age; ??
  27. ?????????} ??
  28. ??
  29. ????????? //?設置年齡值 ??
  30. ????????? public ? void ?setAge( int ?age)?{ ??
  31. ??????????????????? this ?.age?=?age; ??
  32. ?????????} ??
  33. ??
  34. ????????? //?執行注冊方法 ??
  35. ????????? public ?String?execute()? throws ?Exception?{ ??
  36. ???????????????????FORWARD?=? "success" ; ??
  37. ??????????????????? return ?FORWARD?; ??
  38. ?????????} ??
  39. ? ??
  40. ????????? //?校驗方法,用來輸入校驗 ??
  41. ????????? public ? void ?validate()?{ ??
  42. ??????????????????? //?校驗是否輸入用戶名 ??
  43. ??????????????????? if ?(getUsername()?==? null ?||?getUsername().trim().equals( "" ))?{??????????????????? ??
  44. ????????????????????????????addFieldError( "username" ,? "?請輸入用戶名?" ); ??
  45. ???????????????????} ??
  46. ??????????????????? //?校驗是否輸入生日 ??
  47. ??????????????????? if ?(getBirthday()== null ?){ ??
  48. ????????????????????????????addFieldError( "birthday" ,? "?請輸入生日日期?" ); ??
  49. ???????????????????} else ??
  50. ??????????????????? //?校驗是否輸入正確的生日日期 ??
  51. ??????????????????? if ?(getBirthday().after( new ?Date())){ ??
  52. ????????????????????????????addFieldError( "birthday" ,? "?請不要輸入未來日期?" ); ??
  53. ???????????????????} ??
  54. ??????????????????? //?校驗是否輸入密碼 ??
  55. ??????????????????? if ?(getPassword()?==? null ?||?getPassword().trim().equals( "" ))?{????????????????????? ??
  56. ????????????????????????????addFieldError( "password" ,? "?請輸入密碼?" ); ??
  57. ???????????????????} ??
  58. ??????????????????? //?校驗是否輸入確認密碼 ??
  59. ??????????????????? if ?(getRepassword()?==? null ?||?getRepassword().trim().equals( "" ))?{???????????????????? ??
  60. ????????????????????????????addFieldError( "repassword" ,? "?請輸入確認密碼?" ); ??
  61. ???????????????????} ??
  62. ??????????????????? //?校驗輸入的密碼和確認密碼是否一致 ??
  63. ??????????????????? if ?(!getPassword().equals(getRepassword()))?{??????????????????????????? ??
  64. ????????????????????????????addFieldError( "repassword" ,? "?確認密碼和密碼輸入不一致?" ); ??
  65. ???????????????????} ??
  66. ??????????????????? //?校驗輸入的手機號碼長度是否正確 ??
  67. ??????????????????? if ?(getMobile().length()!= 11 )?{?????????????????????? ??
  68. ????????????????????????????addFieldError( "mobile" ,? "?請輸入正確的手機號碼?" ); ??
  69. ???????????????????} ??
  70. ??????????????????? //?校驗輸入的年齡是否正確 ??
  71. ??????????????????? if ?(getAge()< 1 ||getAge()> 99 )?{????????????????????? ??
  72. ????????????????????????????addFieldError( "age" ,? "?請輸入您的真實年齡?" ); ??
  73. ???????????????????}???????????????? ??
  74. ?????????} ??
  75. }???
    <!------------ 文件名: RegisterAction.java---------------->
public class RegisterAction extends ActionSupport {
         // Action 類公用私有變量,用來做頁面導航標志
         private static String FORWARD = null ;

         // 用戶名屬性
         private String username;
………
         // 年齡屬性
         private int age;

         // 取得用戶名值
         public String getUsername() {
                   return username;
         }
 
         // 設置用戶名值
         public void setUsername(String username) {
                   this .username = username;
         }

…………………

         // 取得年齡值
         public int getAge() {
                   return age;
         }

         // 設置年齡值
         public void setAge(int age) {
                   this .age = age;
         }

         // 執行注冊方法
         public String execute() throws Exception {
                   FORWARD = "success";
                   return FORWARD ;
         }
 
         // 校驗方法,用來輸入校驗
         public void validate() {
                   // 校驗是否輸入用戶名
                   if (getUsername() == null || getUsername().trim().equals("")) {                   
                            addFieldError("username", " 請輸入用戶名 ");
                   }
                   // 校驗是否輸入生日
                   if (getBirthday()==null ){
                            addFieldError("birthday", " 請輸入生日日期 ");
                   }else
                   // 校驗是否輸入正確的生日日期
                   if (getBirthday().after(new Date())){
                            addFieldError("birthday", " 請不要輸入未來日期 ");
                   }
                   // 校驗是否輸入密碼
                   if (getPassword() == null || getPassword().trim().equals("")) {                     
                            addFieldError("password", " 請輸入密碼 ");
                   }
                   // 校驗是否輸入確認密碼
                   if (getRepassword() == null || getRepassword().trim().equals("")) {                    
                            addFieldError("repassword", " 請輸入確認密碼 ");
                   }
                   // 校驗輸入的密碼和確認密碼是否一致
                   if (!getPassword().equals(getRepassword())) {                           
                            addFieldError("repassword", " 確認密碼和密碼輸入不一致 ");
                   }
                   // 校驗輸入的手機號碼長度是否正確
                   if (getMobile().length()!=11) {                      
                            addFieldError("mobile", " 請輸入正確的手機號碼 ");
                   }
                   // 校驗輸入的年齡是否正確
                   if (getAge()<1||getAge()>99) {                     
                            addFieldError("age", " 請輸入您的真實年齡 ");
                   }                
         }
} 
  

配置文件中的導航定義:

Java代碼 復制代碼
  1. <!--------------?文件名:?struts.xml---------------->? ??
  2. <struts>? ??
  3. ?????????<!--?Action?所在包定義?-->? ??
  4. ?????????< package ?name= "C08.1.1" ? extends = "struts-default" >? ??
  5. ?????????<!--?Action?名字,類以及導航頁面定義?-->? ??
  6. ???????????????????<!--?通過?Action?類處理才導航的的?Action?定義?-->? ??
  7. ???????????????????<action?name= "Register" ? ??
  8. ???????????????????????????? class = "action.RegisterAction" >? ??
  9. ????????????????????????????<result?name= "input" >/jsp/register.jsp</result>? ??
  10. ????????????????????????????<result?name= "success" >/jsp/success.jsp</result>? ??
  11. ???????????????????</action>? ??
  12. ???????????????????<!--?直接導航的的?Action?定義?-->? ??
  13. ???????????????????<action?name= "index" ?>? ??
  14. ????????????????????????????<result?>/jsp/register.jsp</result>???????????????????????? ??
  15. ???????????????????</action>? ??
  16. ?????????</ package >? ??
  17. </struts>???
    <!-------------- 文件名: struts.xml----------------> 
<struts> 
         <!-- Action 所在包定義 --> 
         <package name="C08.1.1" extends="struts-default"> 
         <!-- Action 名字,類以及導航頁面定義 --> 
                   <!-- 通過 Action 類處理才導航的的 Action 定義 --> 
                   <action name="Register" 
                            class="action.RegisterAction"> 
                            <result name="input">/jsp/register.jsp</result> 
                            <result name="success">/jsp/success.jsp</result> 
                   </action> 
                   <!-- 直接導航的的 Action 定義 --> 
                   <action name="index" > 
                            <result >/jsp/register.jsp</result>                        
                   </action> 
         </package> 
</struts> 

  

?

輸入校驗的數據輸入 JSP 文件:

Java代碼 復制代碼
  1. <!-------------------?文件名:?register.jsp--------------------->? ??
  2. …………? ??
  3. ??????????????????<!--?用戶信息注冊?form?表單?-->? ??
  4. ?????????<s:form?action= "Register" >? ??
  5. ???????????????????<table?width= "60%" ?height= "76" ?border= "0" >? ??
  6. ?????????????????????????????????????<!--?各標簽定義?-->? ??
  7. ?????????????????????????????????????<s:textfield?name= "username" ?label= "?用戶名?" />? ??
  8. ?????????????????????????????????????<s:password?name= "password" ?label= "?密???碼?" ?/>? ??
  9. ?????????????????????????????????????<s:password?name= "repassword" ?label= "?密???碼確認?" ?/>? ??
  10. ?????????????????????????????????????<s:textfield?name= "birthday" ?label= "?生日?" />? ??
  11. ?????????????????????????????????????<s:textfield?name= "mobile" ?label= "?手機號碼?" />? ??
  12. ?????????????????????????????????????<s:textfield?name= "age" ?label= "?年齡?" />? ??
  13. ?????????????????????????????????????<s:submit?value= "?注冊?" ?align= "center" />??????????????????????????????? ??
  14. ???????????????????</table>? ??
  15. ?????????</s:form>???
    <!------------------- 文件名: register.jsp---------------------> 
………… 
                  <!-- 用戶信息注冊 form 表單 --> 
         <s:form action="Register"> 
                   <table width="60%" height="76" border="0"> 
                                     <!-- 各標簽定義 --> 
                                     <s:textfield name="username" label=" 用戶名 "/> 
                                     <s:password name="password" label=" 密   碼 " /> 
                                     <s:password name="repassword" label=" 密   碼確認 " /> 
                                     <s:textfield name="birthday" label=" 生日 "/> 
                                     <s:textfield name="mobile" label=" 手機號碼 "/> 
                                     <s:textfield name="age" label=" 年齡 "/> 
                                     <s:submit value=" 注冊 " align="center"/>                               
                   </table> 
         </s:form> 

  

?

數據不進行任何輸入顯示出錯信息如圖 8.1

Struts2講義34

8.1 ? 輸入校驗發現數據沒有進行任何輸入

輸入密碼不一致時的出錯信息顯示如圖 8.2

Struts2講義34

8.2 ? 密碼輸入不一致時出錯信息顯示

代碼解釋

1 Struts2 對輸入校驗這方面采用的最基本方法是在每個 Action 里繼承 ActionSupport 類,并且重寫它的輸入校驗方法 validate() 。本示例中的 RegisterAction 代碼中也顯示,根據頁面上輸入的各種校驗將所有不符合輸入校驗規則的錯誤信息都由 ActionSupport 類中另一個方法 addFieldError 方法將錯誤信息加入到表單錯誤信息,并且在輸入數據的頁面顯示,而不會再由 Action 導航到注冊成功頁面。 struts.xml 也定義了 1 個名字為“ input ”的 result ,它表明將所有輸入失敗的錯誤信息導航到一個特定頁面。本示例中筆者還是將這個特定頁面定義為數據輸入的頁面。

2 )再次閱讀 RegisterAction 代碼,可以發現在 validate 方法里筆者編寫了很多 if 語句。每一個 if 語句中都針對表單中某一字段進行輸入校驗。如果發現不符合輸入校驗規則則都調用 addFieldError 方法。該方法中有兩個參數,第 1 個參數都是表單中字段名,這里所有的名字都和輸入數據的頁面中每一個字段的 name 屬性中內容相同。否則 Struts2 是找不到具體錯誤信息是針對哪一個字段。第 2 個參數則是錯誤信息的內容。這些內容就是在輸入校驗失敗時候顯示在之前所說的特定頁面中的。由圖 7.1 和圖 7.2 可以看到這些內容在頁面上是如何顯示的。

3 validate 方法中的各個 if 語句判斷了表單中各個字段的輸入數據是否符合輸入校驗的規則,這些規則也是開發人員根據特定業務邏輯定義的。比如其中數據是否輸入,輸入的生日信息是否在當前日期之前等等。這里細心讀者又可以發現并沒有對這些字段進行類型轉換,但在 Action 中某些字段類型都已經變成 Java 的一些基本類型。比如生日字段,頁面上輸入時候是字符串,在 Action 中已經變成 Java 中的 Date 類型。因為之前在類型轉換章節也已說明:頁面上輸入的數據已經都由字符串類型轉換成 Action 中指定的 Java 類型。因此從這一點更加說明類型轉換是輸入校驗的基礎,也可以說是 1 種特定的輸入校驗。

8.1.2 ? validateXXX 方法進行輸入校驗

技術要點

本節代碼也就 1 個簡單的用戶注冊功能具體介紹利用 validateXXX 方法對 Action 中某一特定的方法進行校驗。

Action 具體方法的 validateXXX 方法介紹。

演示代碼

使用的 Action 文件:

Java代碼 復制代碼
  1. <!-----------?文件名:?RegisterAction.java------------------>? ??
  2. public ? class ?RegisterAction? extends ?ActionSupport?{? ??
  3. ????????? //?Action?類公用私有變量,用來做頁面導航標志? ??
  4. ????????? private ? static ?String?FORWARD?=? null ?;? ??
  5. ????????? //?用戶名屬性? ??
  6. ????????? private ?String?username;? ??
  7. ………? ??
  8. ????????? //?年齡屬性? ??
  9. ????????? private ? int ?age;? ??
  10. ????????? //?取得用戶名值? ??
  11. ????????? public ?String?getUsername()?{? ??
  12. ??????????????????? return ?username;? ??
  13. ?????????}? ??
  14. ??
  15. ????????? //?設置用戶名值? ??
  16. ????????? public ? void ?setUsername(String?username)?{? ??
  17. ??????????????????? this ?.username?=?username;? ??
  18. ?????????}? ??
  19. …………………? ??
  20. ????????? //?取得年齡值? ??
  21. ????????? public ? int ?getAge()?{? ??
  22. ??????????????????? return ?age;? ??
  23. ?????????}? ??
  24. ? ??
  25. ????????? //?設置年齡值? ??
  26. ????????? public ? void ?setAge( int ?age)?{? ??
  27. ??????????????????? this ?.age?=?age;? ??
  28. ?????????}? ??
  29. ? ??
  30. ????????? //?執行注冊方法? ??
  31. ????????? public ?String?Register()? throws ?Exception?{? ??
  32. ???????????????????FORWARD?=? "success" ;? ??
  33. ??????????????????? return ?FORWARD?;? ??
  34. ?????????}? ??
  35. ?? ??
  36. ????????? //?校驗方法,用來輸入校驗? ??
  37. ????????? public ? void ?validateRegister()?{? ??
  38. ??????????????????? //?校驗是否輸入用戶名? ??
  39. ?????????????????? if ?(getUsername()?==? null ?||?getUsername().trim().equals( "" ))?{???????????????????? ??
  40. ????????????????????????????addFieldError( "username" ,? "?請輸入用戶名?" );? ??
  41. ???????????????????}? ??
  42. ??????????????????? //?校驗是否輸入生日? ??
  43. ??????????????????? if ?(getBirthday()== null ?){? ??
  44. ????????????????????????????addFieldError( "birthday" ,? "?請輸入生日日期?" );? ??
  45. ???????????????????} else ? ??
  46. ??????????????????? //?校驗是否輸入正確的生日日期? ??
  47. ??????????????????? if ?(getBirthday().after( new ?Date())){? ??
  48. ????????????????????????????addFieldError( "birthday" ,? "?請不要輸入未來日期?" );? ??
  49. ???????????????????}? ??
  50. ??????????????????? //?校驗是否輸入密碼? ??
  51. ??????????????????? if ?(getPassword()?==? null ?||?getPassword().trim().equals( "" ))?{?????????????????????? ??
  52. ????????????????????????????addFieldError( "password" ,? "?請輸入密碼?" );? ??
  53. ???????????????????}? ??
  54. ??????????????????? //?校驗是否輸入確認密碼? ??
  55. ?????????????????? if ?(getRepassword()?==? null ?||?getRepassword().trim().equals( "" ))?{????????????????????? ??
  56. ????????????????????????????addFieldError( "repassword" ,? "?請輸入確認密碼?" );? ??
  57. ???????????????????}? ??
  58. ??????????????????? //?校驗輸入的密碼和確認密碼是否一致? ??
  59. ??????????????????? if ?(!getPassword().equals(getRepassword()))?{???????????????????????????? ??
  60. ????????????????????????????addFieldError( "repassword" ,? "?確認密碼和密碼輸入不一致?" );? ??
  61. ???????????????????}? ??
  62. ??????????????????? //?校驗輸入的手機號碼長度是否正確? ??
  63. ??????????????????? if ?(getMobile().length()!= 11 )?{??????????????????????? ??
  64. ????????????????????????????addFieldError( "mobile" ,? "?請輸入正確的手機號碼?" );? ??
  65. ???????????????????}? ??
  66. ??????????????????? //?校驗輸入的年齡是否正確? ??
  67. ??????????????????? if ?(getAge()< 1 ||getAge()> 99 )?{?????????????????????? ??
  68. ????????????????????????????addFieldError( "age" ,? "?請輸入您的真實年齡?" );? ??
  69. ???????????????????}????????????????? ??
  70. ????}? ??
  71. }???
    <!----------- 文件名: RegisterAction.java------------------> 
public class RegisterAction extends ActionSupport { 
         // Action 類公用私有變量,用來做頁面導航標志 
         private static String FORWARD = null ; 
         // 用戶名屬性 
         private String username; 
……… 
         // 年齡屬性 
         private int age; 
         // 取得用戶名值 
         public String getUsername() { 
                   return username; 
         } 

         // 設置用戶名值 
         public void setUsername(String username) { 
                   this .username = username; 
         } 
………………… 
         // 取得年齡值 
         public int getAge() { 
                   return age; 
         } 
 
         // 設置年齡值 
         public void setAge(int age) { 
                   this .age = age; 
         } 
 
         // 執行注冊方法 
         public String Register() throws Exception { 
                   FORWARD = "success"; 
                   return FORWARD ; 
         } 
  
         // 校驗方法,用來輸入校驗 
         public void validateRegister() { 
                   // 校驗是否輸入用戶名 
                  if (getUsername() == null || getUsername().trim().equals("")) {                    
                            addFieldError("username", " 請輸入用戶名 "); 
                   } 
                   // 校驗是否輸入生日 
                   if (getBirthday()==null ){ 
                            addFieldError("birthday", " 請輸入生日日期 "); 
                   }else 
                   // 校驗是否輸入正確的生日日期 
                   if (getBirthday().after(new Date())){ 
                            addFieldError("birthday", " 請不要輸入未來日期 "); 
                   } 
                   // 校驗是否輸入密碼 
                   if (getPassword() == null || getPassword().trim().equals("")) {                      
                            addFieldError("password", " 請輸入密碼 "); 
                   } 
                   // 校驗是否輸入確認密碼 
                  if (getRepassword() == null || getRepassword().trim().equals("")) {                     
                            addFieldError("repassword", " 請輸入確認密碼 "); 
                   } 
                   // 校驗輸入的密碼和確認密碼是否一致 
                   if (!getPassword().equals(getRepassword())) {                            
                            addFieldError("repassword", " 確認密碼和密碼輸入不一致 "); 
                   } 
                   // 校驗輸入的手機號碼長度是否正確 
                   if (getMobile().length()!=11) {                       
                            addFieldError("mobile", " 請輸入正確的手機號碼 "); 
                   } 
                   // 校驗輸入的年齡是否正確 
                   if (getAge()<1||getAge()>99) {                      
                            addFieldError("age", " 請輸入您的真實年齡 "); 
                   }                 
    } 
} 

  

?

配置文件中的導航定義同 8.1.1 。輸入校驗的數據輸入 JSP 文件同 8.1.1 有一點不同,具體代碼如下:

Java代碼 復制代碼
  1. <!------------?文件名:?register.jsp---------------->? ??
  2. …………? ??
  3. ????<!--?fielderror?標簽顯示所有校驗錯誤信息?-->? ??
  4. ??????<s:fielderror></s:fielderror>? ??
  5. ?????????<!--?用戶信息注冊?form?表單?-->? ??
  6. ?????????<s:form?action= "Register!Register.action?" >? ??
  7. ???????????????????<table?width= "60%" ?height= "76" ?border= "0" >? ??
  8. ?????????????????????????????????????<!--?各標簽定義?-->? ??
  9. ?????????????????????????????????????<s:textfield?name= "username" ?label= "?用戶名?" />? ??
  10. ?????????????????????????????????????<s:password?name= "password" ?label= "?密???碼?" ?/>? ??
  11. ?????????????????????????????????????<s:password?name= "repassword" ?label= "?密???碼確認?" ?/>? ??
  12. ?????????????????????????????????????<s:textfield?name= "birthday" ?label= "?生日?" />? ??
  13. ?????????????????????????????????????<s:textfield?name= "mobile" ?label= "?手機號碼?" />? ??
  14. ?????????????????????????????????????<s:textfield?name= "age" ?label= "?年齡?" />? ??
  15. ?????????????????????????????????????<s:submit?value= "?注冊?" ?align= "center" />??????????????????????????????? ??
  16. ???????????????????</table>? ??
  17. ?????????</s:form>???
    <!------------ 文件名: register.jsp----------------> 
………… 
    <!-- fielderror 標簽顯示所有校驗錯誤信息 --> 
      <s:fielderror></s:fielderror> 
         <!-- 用戶信息注冊 form 表單 --> 
         <s:form action="Register!Register.action "> 
                   <table width="60%" height="76" border="0"> 
                                     <!-- 各標簽定義 --> 
                                     <s:textfield name="username" label=" 用戶名 "/> 
                                     <s:password name="password" label=" 密   碼 " /> 
                                     <s:password name="repassword" label=" 密   碼確認 " /> 
                                     <s:textfield name="birthday" label=" 生日 "/> 
                                     <s:textfield name="mobile" label=" 手機號碼 "/> 
                                     <s:textfield name="age" label=" 年齡 "/> 
                                     <s:submit value=" 注冊 " align="center"/>                               
                   </table> 
         </s:form> 

  

?

數據不進行任何輸入顯示出錯信息如圖 8.3

Struts2講義34

8.3 ? 輸入校驗發現數據沒有進行任何輸入

輸入密碼不一致時的出錯信息顯示如圖 8.4

Struts2講義34

8.4 ? 密碼輸入不一致時出錯信息顯示

代碼解釋

1 Struts2 中除了 validate 方法之外它還有 1 validateXXX 方法針對 Action 中某一特定方法進行該方法的各種字段的輸入校驗。其中 XXX 就是該特定方法名。在本示例中筆者定義了一個 Register 方法,該方法和上一小節中的 execute 方法類似只是一個簡單的導航。但是在該 RegisterAction 中就沒有了 validate 方法,取而代之的是 validateRegister 方法。

注意:如果讀者使用 validateRegister 方法,那最好不要再使用 validate 方法。雖然和上一小節示例代碼比較這兩個方法里的內容是完全一摸一樣的,但是 validate 方法是對所有 Action 中方法的輸入校驗都進行校驗, validateRegister 方法只對 Register 方法進行校驗。因此兩者不能重復使用,都使用會造成兩個方法都進行了校驗的結果。執行順序是先 validateRegister validate 。如果 validateRegister 方法有特殊的輸入校驗則就會被 validate 方法“覆蓋”,因此達不到預期的輸入校驗目的。推薦讀者自己進行試驗,在這兩個方法里設置斷點運行一下就知道了。

2 )請讀者閱讀數據輸入的頁面代碼,在代碼中筆者用黑體標注的是 1 個特殊的運行 Action 的示例。這里筆者故意把名字都寫為“ Register ”來讓讀者加深理解。首先第 1 個“ Register ”是 RegisterAction 中的方法名,一定要和方法名寫成一樣。而在“!”后的“ Register ”則是在 struts.xml 配置文件中定義的 RegisterAction 的映射里的“ name ”內容。黑體的內容表明該表單的 Action 是執行 RegisterAction 中的 Register 方法。如果在頁面中直接寫“!”后面的內容則表示執行的是 RegisterAction 中的 execute 方法。在圖 8.3 瀏覽器中的 URL 筆者也有紅框圈中,表明該表單數據輸入完成后提交時候執行的是 Register 方法。這是 Struts2 中一個特殊的使用方式。如果開發者以后在使用 Struts2 的開發工作中根據特定業務邏輯不想執行 execute 方法而是執行另外一個開發完成的方法。則在視圖頁面(包括 velocity freemarker )中可以以這種方式讓表單提交后執行該開發完成的方法。

3 validateRegister 方法中各個 if 語句定義和上一小節的 validate 方法內容相同。這里筆者只是作為示例所以兩個方法中的內容相同,其實可以和上一小節中的 validate 方法的內容不相同,用來進行 Register 方法中特定的表單字段輸入校驗。

4 )在數據輸入的視圖界面筆者又增加了 Struts2 的標簽 fielderror 。圖 8.3 和圖 8.4 也可以看出在具體字段輸入校驗出錯信息顯示之外。在表單頭部也有出錯信息顯示。這其實和 Struts2 的校驗順序有關。

在之前說明 validateRegister 方法和 validate 方法時候也記述了兩者的執行校驗順序是先 validateRegister validate 。其實在視圖界面進行表單提交后。輸入校驗順序是以如下的順序:

l ???????? 查找 Action 中是否有 validateXXX 方法。如果有則執行該方法。將校驗產生的錯誤信息放置到 ActionContext 對象中。

l ???????? 查找 Action 中是否有 validate 方法。如果有則執行該方法。將校驗產生的錯誤信息放置到 ActionContext 對象中。

l ???????? 查找視圖界面是否有 fielderror 標簽定義。如果有則返回到 result 為“ input ”的視圖。同時 ActionContext 對象中有關的輸入校驗的錯誤信息也顯示在該視圖中。

Struts2 的輸入校驗順序就是按照如上說明來先后執行的,這也更好的說明了 validateRegister 方法和 validate 方法并存在 Action 時候輸入校驗是如何進行的。這也是圖 8.3 和圖 8.4 會產生錯誤信息顯示兩遍現象的原因。

Struts2講義34


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩在线观看精品 | 国产福利资源在线 | 亚洲免费中文字幕 | 武松2013 | 狠狠色狠狠色 | 国内自拍一二三四2021 | 美女下面直流白浆视频 | 色喜亚洲美女沟沟炮交国模 | 天堂网果冻传媒 | 91高清免费 | 欧美日韩在线观看视频 | 精品伊人久久大线蕉地址 | 欧美一区二区在线视频 | 亚洲第一页在线视频 | 欧美精品 在线观看 | 看一级毛片 | 久本草在线中文字幕亚洲欧美 | 久久久婷婷一区二区三区不卡 | 91av在线免费 | 亚洲成人精品 | 性高湖久久久久久久久aaaaa | 98精品国产高清在线xxxx | 五月婷婷综合激情网 | 日韩精品一区二区三区中文字幕 | www97影院| 一级黄片毛片免费看 | 亚洲欧美日韩精品久久奇米色影视 | 久久婷五月 | 亚洲va欧美va天堂v国产综合 | 91成人小视频 | 99热国产精品 | 日韩在线视频在线 | 日本成日本片人免费 | 成人免费淫片aa视频免费 | 国产激情网站 | 亚洲精品福利在线 | 一级片观看| 日本欧美不卡一区二区三区在线 | 久久国产精品精品国产 | 欧洲成人全免费视频网站 | 国产成人在线影院 |