Struts2學習筆記之輸入校驗

Struts2學習筆記

第十一記:struts2輸入校驗

注:action內針對所有方法或指定方法名的校驗。如果有驗證方法必須在struts.xml中設置input視圖,當未通過驗證返回名稱爲input的視圖

1、struts2的輸入校驗方式

  方式一:採用手工編碼實現

  方式二:基於XML配置實現

2、採用手工編碼實現 

  2-1、編寫JSP表單輸入:change.jsp

  <from action="${pageContext.request.contextPath}/person/person_save.action"method="post">

   用戶名:<input name="username" type="text"/>

  手機號:<input name="mobile"type="text"/>

  <input  type="submit"value="提交"/>

  </from>

  2-2、編寫Action的方法

    該action繼承自ActionSupport類,並且需要重寫validate方法。

   public  class PersonAction extends ActionSupport{

           private  String username;

           private  String mobile;

           public String getUsername(){
                  return this.message;
           }
          public void setUsername(String username){
                 this.username=username;
          }

          public String getMobile(){
                  return this.mobile;
           }
          public void setMobile(String mobile){
                 this.mobile=mobile;
          }

         publicString  save( ){
                    ActionContext.getContext.put("message","保存成功!");

                    return "message";
          }

         public String  update( ){
                    ActionContext.getContext.put("message","更新成功!");

                     return "message";
          }

        @override//此方法會對action中的所有方法進行校驗

         public  void   validate(){

                 if(this.username==null||"".equals(this.username.trim())){

                      this.addFieldError("username","用戶名不能爲空");

                }

                if(this.mobile==null||"".equals(this.username.trim())){

                       this.addFieldError("mobile","手機號不能爲空");

               }else{

                      if(!Pattern.compile("^1[358]\\d${9}")).matcher(this.mobile).method()){

                                this.addFieldError("mobile","手機號格式不正確");

                      }

               }

         }

  }

   2-3、導入struts標籤庫並設置錯誤結果顯示標籤

     <%@  taglib  uri="struts-tags"  prefix="s" %>

   在表單外部或者內部添加錯誤顯示標籤:<s:fielderror />

  2-4、修改struts.xml文件

<package name="person" namespace="/person" extends="struts default">

    <action   name="person_*" class="com.struts.action.PersonAction">

             <result  name="input">/WEB-INF/page/change.jsp</result>

             <result  name="message">/WEB-INF/page/message.jsp</result>

    </action>

    </package>

  2-5、控制指定方法的校驗

    規則:名稱如validateXxx的方法表示對xxx方法的校驗。

   如果將validate方法改爲validateSave則只能對save方法進行校驗。

  2-6、校驗過程梳理

      2-6-1、類型轉換:對action對象的屬性賦值

      2-6-2、檢測類型轉換異常,如果發現則通過ActionContext和ConversionError對象添加異常信息到fieldErrors對象

      2-6-3、執行validateXxx()方法。

      2-6-4、執行validate()方法。

      2-6-5、讀取fieldErrors對象,如果不爲空則轉到Input視圖,否則執行action操作。

  注:這裏發生的錯誤多半是類型轉換。

3、XML配置校驗

3-1、驗證文件的命名和驗證規則

實現action類同樣需要繼承自ActionSupport,需要驗證的action的配置文件於struts.xml都在src目錄下,並且該xml驗證文件的名稱是ActionName-validation.xml

"*-validation.xml"是固定寫法;*是action的名稱,如PersonAction的驗證文件是PersonAction-validation.xml.

xwork目錄下路徑;com.opensymphony.xwork2.validator.validators有個default.xml文件提供了基本數據驗證的默認驗證。

default.xml的配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
  "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
< !-- START SNIPPET: validators-default -->
< validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
< /validators>
< !-- END SNIPPET: validators-default -->

-校驗規則:
required:必填校驗器
requiredstring:必填字符串校驗器
int:整數校驗器
double:雙精度浮點數校驗器
date:日期校驗器
expression:表達式校驗器
fieldexpression:字段表達式校驗器
email:電子郵件校驗器
url:網址校驗器
visitor:Visitor校驗器
conversion:轉換校驗器
stringlength:字符串長度校驗器
  regex:正則表達式校驗器

3-2、struts2例子提供的配置校驗的編寫示例
路徑:/struts_2.2.1.1/apps/blank/src/main/resources/example/login-validation.xml
< !DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 
< validators>
      <field name="username"> 
            <field-validator type="requiredstring"> 
                <message key="requiredstring"/> 
         </field-validator> 
       </field> 
       <field name="password"> 
              <field-validator type="requiredstring"> 
                   <message key="requiredstring"/> 
           </field-validator> 
        </field> 
< /validators>


3-3、編寫自己的驗證文件

<?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
 <validators>

  <!-- 驗證用戶名是否合法 -->
     <field name="username">
         <field-validator type="requiredstring">
         <param name="trim">true</param>
         <message>請填寫用戶名</message>
      </field-validator>
     <field-validator type="stringlength"> 
          <param name="minLength">4</param>
         <param name="maxLength">32</param> 
         <message>用戶名長度應在4到32個字符間</message> 
   </field-validator>
< /field>

<!-- 驗證密碼是否合法 -->
   <field name="password">
      <field-validator type="requiredstring">
          <message>請填寫密碼</message>
    </field-validator>
     <field-validator type="stringlength"> 
        <param name="minLength">6</param>
        <param name="maxLength">32</param> 
         <message>爲了您賬號的安全,請設置6個字母以上的密碼(最長可設置32個字母)</message> 
    </field-validator>
< /field>

<!-- 驗證手機號是否合法 -->
< validators>
   <field name="user">
     <field-validator type="regex">
        <param name="expression_r"><![CDATA[^1[358]\d{9}$]]></param>
        <message>不是合法的手機號</message>
    </field-validator>
   </field>
< /validators>

</validators>

3-4、常用的驗證配置
3-4-1、必填檢驗

<validators>
     <field name="username">
       <field-validator type="required">
             <message>指定檢驗失敗的提示信息</message>
       </field-validator>
    </field>
< /validators>

3-4-2、必填字符串檢驗
<validators>
   <field name="username">
         <field-validator type="requiredstring">
                <param name="trim">true</param>
              <message>指定檢驗失敗的提示信息</message>
        </field-validator>
    </field>
< /validators>
3-4-3、整數檢驗器/浮點檢驗
<validators>
    <field name="age">
       <field-validator type="int">
           <param name="min">1</param>
          <param name="max">150</param>
          <message>年紀必須在1到150之間</message>
       </field-validator>
    </field>
< /validators>
3-4-4、日期檢驗
<validators>
 <field name="birth">
     <field-validator type="date">
         <param name="min">1900-01-01</param>
         <param name="max">2050-02-21</param>
        <message key="birth.range"/>
    </field-validator>
 </field>
< /validators>
3-4-5、字段表達式檢驗器(要求指定字段滿足一個邏輯表達式

<validators>
    <field name="re_pass">
        <field-validator type="fieldexpression">
        <!--指定邏輯表達式 -->
             <param name="expression"> (pass eq re_pass)</param>
             <message>密碼必須和確認密碼相等</message>
       </field-validator>
     </field>
< /validators>
3-4-6、郵件地址校驗
<validators>
  <field name="email">
       <field-validator type="email">
          <message>你的電子郵件地址必須是一個有效的電郵地址</message>
        </field-validator>
   </field>
< /validators>
3-4-7、網址檢驗
<validators>
    <field name="url">
        <field-validator type="url">
             <message>你的主頁地址必須是一個有效的網址</message>
       </field-validator>
    </field>
< /validators>
3-4-8、字符串長度檢驗
<validators>
   <field name="user">

       <field-validator type="stringlength">
          <param name="minlength">4</param>
         <param name="maxlength">20</param>
         <message>你的用戶名長度必須在4到20之間</message>
      </field-validator>
   </field>
< /validators>
3-4-9、正則表達式檢驗
<validators>
   <field name="user">
     <field-validator type="regex">
        <param name="expression_r"><![CDATA[(\w{4,25})]]></param>
        <message>您輸入的用戶名只能是字母和數組,且長度必須在4到25之間</message>
    </field-validator>
   </field>
< /validators>
3-5、配置指定方法的校驗
文件命名規則:ActionClassName-ActonName-validation.xml
如在PersionAction中訪問update的方法驗證,則可以寫成:
PersonAction-person_update-validation.xml
struts.xml的配置如下:
<action name="person_*" class="com.struts.action.PersonAction">
< result name="input">/WEB-INF/page/change.jsp</result><!-- 驗證失敗返回該頁面 -->
< result name="message">/WEB-INF/page/message.jsp</result><!-- 成功轉到頁面 -->
...</action>

注意:所有方法的校驗和指定方法的校驗同時存在的時候,方法驗證會合並然後執行,對於同樣的方法
執行後面那個,前面的被覆蓋。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章