§封Ja葬va§

          Struts2輸入校驗(yàn)

          Struts2提供了客戶(hù)端校驗(yàn)與服務(wù)端校驗(yàn)。這里只是做個(gè)簡(jiǎn)易的總結(jié)。

          1.)服務(wù)端校驗(yàn):
          當(dāng)程序流程進(jìn)入到Action類(lèi),并經(jīng)歷了struts2的類(lèi)型轉(zhuǎn)換階段后。接著進(jìn)入struts2的輸入校驗(yàn)階段。
          struts2的輸入校驗(yàn)可自己編碼進(jìn)行校驗(yàn),也可通過(guò)有規(guī)則命名的配置文件進(jìn)行校驗(yàn)。

          1.1)編碼校驗(yàn):

          在Action類(lèi)里重寫(xiě)父類(lèi)的validate()方法即可。

          public void validate(){

              if(null == username || "".equals(username)){
             
                  this.addFieldError("username","username should not be empty !");
                 
              }else if(username.length() < 6 || username.length() > 12){
             
                  this.addFieldError("username","username should be between 6 and 12 !");
                 
              }

             

              if(null == password || "".equals(password )){
             
                  this.addFieldError("password ","password should not be empty !");
                 
              }else if(password .length() < 6 || password .length() > 12){
             
                  this.addFieldError("password ","password should be between 6 and 12 !");
                 
              }

          }

          在上面的validate方法中,一旦發(fā)現(xiàn)校驗(yàn)失敗,就把失敗提示通過(guò)addFieldError方法添加到系統(tǒng)的fieldError中。校驗(yàn)完畢后,若系統(tǒng)的fieldError不為空,則自動(dòng)轉(zhuǎn)到input視圖對(duì)應(yīng)的JSP頁(yè)面中輸出錯(cuò)誤提示,這與類(lèi)型轉(zhuǎn)換失敗后的處理是完全一樣的。

          為了在input視圖中對(duì)應(yīng)的JSP頁(yè)面輸出錯(cuò)誤提示,應(yīng)該在該頁(yè)面中增加如下代碼:

          <!-- 輸入類(lèi)型轉(zhuǎn)換失敗提示和校驗(yàn)失敗提示 -->

          <s:fielderror/>

           
          這里不能忽略另外種情況:

          Struts2的Action類(lèi)里可以包含多個(gè)處理邏輯,不同的處理邏輯對(duì)應(yīng)不同的方法。即Struts2的Action類(lèi)里定義了幾個(gè)類(lèi)似于execute的方法,只是方法名不同。而重寫(xiě)validate方法無(wú)法知道需要校驗(yàn)的是哪個(gè)處理邏輯。實(shí)際上重寫(xiě)validate方法會(huì)校驗(yàn)所有的處理邏輯。

          為了校驗(yàn)指定處理邏輯,需提供一個(gè)validateXxx()方法,其中xxx為Action對(duì)應(yīng)的處理邏輯方法。

           
          例如Action類(lèi)里有個(gè)login()邏輯方法,那么對(duì)應(yīng)的校驗(yàn)方法validateLogin()方法。

          但之后還是會(huì)調(diào)用validate()進(jìn)行校驗(yàn),因此此時(shí)validate()沒(méi)必要寫(xiě)了,或者讓validate()進(jìn)行公共字段的校驗(yàn)。

           
          1.2)配置文件校驗(yàn)

          只需為Action指定一個(gè)校驗(yàn)文件即可。

          在Action類(lèi)所在的com.test.action包下建立LoginAction-validation.xml校驗(yàn)文件(格式:Action類(lèi)名-validation.xml).

          LoginAction-validation.xml:

          <?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>username should not be empty !</message>
               </field-validator>
            
               <field-validator type="stringlength">
                 <param name="minLength">6</param>
                 <param name="maxLength">12</param>
                 <message>username should be between ${minLength} and ${maxLength}!</message>
               </field-validator>
             </field>
            
             <field name="password">
               <field-validator type="requiredstring">
                 <param name="trim">true</param>
                 <message>password should not be empty !</message>
               </field-validator>
            
               <field-validator type="stringlength">
                 <param name="minLength">6</param>
                 <param name="maxLength">12</param>
                 <message>password should be between ${minLength} and ${maxLength}!</message>
               </field-validator>
             </field>
                
          </validators>

          每個(gè)<field.../>元素指定一個(gè)Action屬性必須遵守的規(guī)則,該元素name屬性指定了被校驗(yàn)的字段;如果該屬性滿(mǎn)足多個(gè)規(guī)則,則在該<field.../>下增多個(gè)<field-validator.../>。
          每個(gè)<field-validator .../>指定一個(gè)校驗(yàn)規(guī)則,該元素的type屬性指定校驗(yàn)器名稱(chēng)該元素可以包含多個(gè)<param .../>子元素,用戶(hù)指定該校驗(yàn)器的參數(shù);除外,每個(gè)<field-validator .../>元素都有一個(gè)必須的<message .../>元素,用戶(hù)確定校驗(yàn)失敗后的提示信息。

          例子中只采用了"必填字符串校驗(yàn)器"和"字符串長(zhǎng)度校驗(yàn)器"2個(gè)校驗(yàn)規(guī)則。

          struts2貌似共提供了13個(gè)校驗(yàn)器:
          required:必填校驗(yàn)器
          requiredstring:必填字符串校驗(yàn)器
          int:整數(shù)校驗(yàn)器
          double:雙精度浮點(diǎn)數(shù)校驗(yàn)器
          date:日期校驗(yàn)器
          expression:表達(dá)式校驗(yàn)器
          fieldexpression:字段表達(dá)式校驗(yàn)器
          email:電子郵件校驗(yàn)器
          url:網(wǎng)址校驗(yàn)器
          visitor:Visitor校驗(yàn)器
          conversion:轉(zhuǎn)換校驗(yàn)器
          stringlength:字符串長(zhǎng)度校驗(yàn)器
          regex:正則表達(dá)式校驗(yàn)器

          用法大部分雷同,用到的時(shí)候可自己google搜索。

           
          配置文件校驗(yàn)肯定不輸給編碼校驗(yàn)的,自然也提供了對(duì)應(yīng)于具體業(yè)務(wù)邏輯的校驗(yàn)規(guī)則文件的格式:

          <Action類(lèi)名-Action所包含的處理方法在struts.xml對(duì)應(yīng)的name屬性-validation.xml>

          例:

          <!-- 配置一個(gè)名為user的Action,對(duì)應(yīng)的邏輯方法為UserAction的login方法-->

          <action name="login" class="com.test.action.UserAction" method="login">
              <result name="input">/login.jsp</result>
              <result name="success">/index.jsp</result>
          </action>

          則此邏輯方法對(duì)應(yīng)的校驗(yàn)規(guī)則文件為:
          UserAction-login-validation.xml

          與編碼校驗(yàn)一樣,校驗(yàn)錯(cuò)誤信息會(huì)添加到系統(tǒng)的fieldError中,校驗(yàn)完畢后若FieldError不為空。則進(jìn)入到input視圖對(duì)應(yīng)的JSP。在<fieldError/>處輸出錯(cuò)誤提示。


          提醒:沒(méi)記錯(cuò)的話(huà)。與編碼校驗(yàn)不同的是校驗(yàn)順序,配置文件校驗(yàn)方式下,

          先UserAction-validation.xml,再UserAction-login-validation.xml,

          因此若是只針login()邏輯進(jìn)行輸入校驗(yàn)的話(huà),那UserAction-validation.xml沒(méi)必要寫(xiě)了,或讓其進(jìn)行公共字段的校驗(yàn)

          2)客戶(hù)端校驗(yàn)

          增加客戶(hù)端校驗(yàn)非常簡(jiǎn)單,將輸入頁(yè)面的表單元素改為使用struts2標(biāo)簽來(lái)生成表單,并且為該表單增加validate="true"屬性即可。 

           

          輸入校驗(yàn)完畢后再進(jìn)入到業(yè)務(wù)邏輯方法來(lái)調(diào)用具體業(yè)務(wù)方法(續(xù)--Struts2核心攔截器)。

          posted on 2009-03-05 10:31 §朱家二少§ 閱讀(1090) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Struts2


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 栾城县| 六安市| 江永县| 龙口市| 宜宾县| 绥德县| 玉溪市| 三穗县| 莱州市| 抚远县| 南投县| 江孜县| 古丈县| 常山县| 塘沽区| 万山特区| 绥宁县| 磐石市| 永昌县| 渑池县| 蓝田县| 凌海市| 随州市| 武功县| 丰台区| 光泽县| 蒲江县| 乌兰浩特市| 辽阳县| 林口县| 石渠县| 筠连县| 盐源县| 武山县| 康平县| 阿拉尔市| 元朗区| 双峰县| 福建省| 吴桥县| 柯坪县|