DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          WebWork的強大的驗證器

          webwork提供了強大的驗證功能,下邊一一介紹一些常用的功能的用法。
          一,首先webwork的validator是基于攔截器的,所以首先要配制一下攔截器,默認的攔截器,已經
          使用了validator,如果你想定義自己的攔截器組合,記得在你的攔截器的stack中把這句話加入
          <interceptor-ref name="validation">
              
          <param name="excludeMethods">
                  input,back,cancel,browse
              
          </param>
          </interceptor-ref>
          二、是否使用自定義Validator:在一般情況下webwork提供的Validator已經能應付大多數問題,
          但是如果你想自己定義,那么記得注冊你的驗證器(Validator),一個簡單的注冊辦法是
          添加一個文件名為 validators.xml 的文件在你的classpath (/WEB-INF/classes) 的根目錄下
          文件中的內容類似如下:
          <validators>
              
          <validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
              
          <validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
              
          <validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
              
          <validator name="double" class="com.opensymphony.xwork.validator.validators.DoubleRangeFieldValidator"/>
              
          <validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
              
          <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
              
          <validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
              
          <validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
              
          <validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
              
          <validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
              
          <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
              
          <validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
              
          <validator name="regex" class="com.opensymphony.xwork.validator.validators.RegexFieldValidator"/>
          </validators>
          注意:
          1,validators.xml如果已經定義了,那么它應該在classpath中可以找到.然而如果不需要自定義的校驗器,那么這不是必須的.WebWork會自動從發布包里的
          xwork jar文件中取得一個事先定義好的校驗器集合(com/opensymphony/xwork/validator/validators/default.xml).
          瀏覽ValidatorFactory的static塊來了解詳細信息
          2,如果自定義的校驗器被定義了而且創建了一個validators.xml文件并放在classpath中,
          記得復制所有其他你需要的預定義的校驗器到validators.xml里,如果你不需要注冊則不需要.
          一旦validators.xml在classpath里被檢測到,缺省的 (com/opensymphony/xwork/validator/validators/default.xml)
          就不會被裝載了.只有沒發現自定義 validators.xml的時候才會裝載.要小心.這點類似Java中的缺省構造函數
          三、定義校驗規則
          <!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="name">
                  
          <!--必添-->
                  
          <field-validator type="requiredstring">
                      
          <!--是否使用trim-->
                      
          <param name="trim">true</param>
                      
          <!--提示的錯誤信息-->
                      
          <message>You must enter a name</message>
                  
          </field-validator>
              
          </field>
              
          <field name="currDate">
                  
          <field-validator type="date">
                      
          <!--最小時間-->
                      
          <param name="min">01/01/2007</param>
                      
          <!--最大時間-->
                      
          <param name="max">02/28/2007</param>
                      
          <!--提示的錯誤信息-->
                      
          <message>
                          The date must be between 
          01-01-2007 and 02-28-2007.
                      
          </message>
                  
          </field-validator>
              
          </field>
              
          <field name="url">
                  
          <!--short-circuit是否短路檢驗,類似&&運算的短路算法-->
                  
          <field-validator type="required" short-circuit="true">
                      
          <!--提示的錯誤信息-->
                      
          <message>You must enter a value for url.</message>
                  
          </field-validator>
                  
          <!--webwork提供的url驗證-->
                  
          <field-validator type="url" short-circuit="true">
                      
          <!--提示的錯誤信息-->
                      
          <message>Not a valid url.</message>
                  
          </field-validator>
              
          </field>
              
          <field name="mail">
                  
          <field-validator type="required">
                      
          <message>You must enter a value for 郵件.</message>
                  
          </field-validator>
                  
          <!--mail的驗證,驗證器由webwork提供-->
                  
          <field-validator type="email">
                      
          <message>Not a valid 郵件.</message>
                  
          </field-validator>
              
          </field>
              
          <field name="age">
                  
          <field-validator type="int">
                      
          <!--同樣的最大最小值-->
                      
          <param name="min">1</param>
                      
          <param name="max">200</param>
                      
          <message>
                          
          <!--注意這里,msn中可以用表達式取出值棧中的值例如${min}-->
                          Only people ages $
          {min} to ${max} may be true,otherwise
                          you are a ghost
                      
          </message>
                  
          </field-validator>
              
          </field>
              
          <field name="desc">
                  
          <field-validator type="requiredstring">
                      
          <param name="trim">true</param>
                      
          <message>You must enter a desc</message>
                  
          </field-validator>
                  
          <field-validator type="stringlength">
                      
          <param name="minLength">1</param>
                      
          <param name="maxLength">10</param>
                      
          <!--從屬性文件中取出my.key顯示,如果取不到my.key就顯示
                      You must enter a desc length
          =10(my.key)-->
                      
          <message key="my.key">
                          You must enter a desc length
          =10(my.key)
                      
          </message>
                  
          </field-validator>
                  
          <!--可以使用正則表達式-->
                  
          <field-validator type="regex">
                      
          <param name="expression">
                          
          <![CDATA[([a-z][0-9][A-Z][x])]]>
                      
          </param>
                      
          <!--message可以由固定的字符串,值棧中的值${desc}以及通過調用方法取到的
                      屬性文件中的值$
          {getText('my.key')}-->
                      
          <message>
                          
          "regex error ${getText('my.key')} ${desc}"
                      
          </message>
                  
          </field-validator>
              
          </field>
              
          <!--上邊的驗證叫字段驗證,下邊這些驗證叫普通驗證,普通驗證是優于字段驗證的。
              在使用短路的時候要小心
          -->
              
          <!--上邊那些都是基于字段的驗證,這個是基于Action的驗證
              如果要在頁面顯示這些消息,需要加入
          <ww:actionError/>
              
          -->
              
          <validator type="expression">
                  
          <!--可以基于表達式的驗證name.equals(desc)-->
                  
          <param name="expression">name.equals(desc)</param>
                  
          <message>name not the same as desc</message>
              
          </validator>
              
          <!-- Plain Validator 2 -->
              
          <!--可以基于表達式的驗證mail.startsWith('mark')-->
              
          <validator type="expression" short-circuit="true">
                  
          <param name="expression">mail.startsWith('mark')</param>
                  
          <message>Email does not start with mark</message>
              
          </validator>
          </validators>
          四、客戶端驗證
          加入validate="true"
          <ww:form name="test" action="javascriptValidation" validate="true">
            ...
          </ww:form>
          這樣的話webwork會根據你的服務器端的驗證,對應生成javaScript的驗證,而且提示信息和服務器端
          驗證的方式一樣,而不是alert的方式顯示。(前題是你使用的都是標準的驗證器)
          五、
          對應上邊驗證器的web頁面
          <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
          <%@ taglib prefix="ww" uri="/webwork"%>
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html>
              
          <head>
                  
          <title></title>
                  
          <ww:head />
              
          </head>
              
          <body>
                  
          <!--  
                  如果想統一的顯示所有的Erro打開下邊這句
                  
          <ww:fielderror />
                  如果想顯示其中一個Error打開下邊這句,默認顯示在字段的正上方
                  
          <ww:fielderror>
                      
          <ww:param value="%{'name'}" />
                  
          </ww:fielderror>
                  
          <ww:fielderror>
                      
          <ww:param>desc</ww:param>
                  
          </ww:fielderror>
                   
          -->
                  
          <ww:form name="test" namespace="/" action="DbAdmin" method="post" validate="true">
                      
          <ww:actionmessage />
                      
          <ww:actionerror/>
                      
          <ww:textfield label="name" name="name" />
                      
          <ww:date id="strCurrDate" name="currDate" format="yyyy-MM-dd" />
                      
          <ww:datepicker name="currDate" id="currDate" showstime="true"
                          format
          ="%Y-%m-%e %H:%M" cssClass="tx" language="zh" required="true"
                          template
          ="datepicker.ftl" label="currDate" value="%{strCurrDate}" >
                      
          </ww:datepicker>
                      
          <ww:textfield label="url" name="url" />
                      
          <ww:textfield label="mail" name="mail" />
                      
          <ww:textfield label="age" name="age" />
                      
          <ww:textfield label="desc" name="desc" />
                      
          <ww:submit action="DbAdmin" method="doTestValidator"
                          value
          ="doTestValidator" />
                  
          </ww:form>
              
          </body>
          </html>
          六、對應上邊的Action代碼
          package niis.web.actions.temp;

          import java.text.SimpleDateFormat;
          import java.util.Date;

          import niis.persistence.ITestDao;
          import niis.persistence.dao.SqlCommand;
          import niis.web.actions.AbstractAction;

          public class DbAdminAction {
              
          private String name;
              
          private Date currDate ;
              
          private String url;
              
          private String mail;
              
          private int age;
              
          private String desc;
              
              
          public String doTestValidator(){
                  System.out.println(name);
                  System.out.println(currDate);
                  System.out.println(url);
                  System.out.println(mail);
                  System.out.println(age);
                  
          return SUCCESS;
              }

              
          /**
               * 
          @return the age
               
          */

              
          public int getAge() {
                  
          return age;
              }

              
          /**
               * 
          @param age the age to set
               
          */

              
          public void setAge(int age) {
                  
          this.age = age;
              }

              
          /**
               * 
          @return the date
               
          */

              
          public Date getCurrDate() {
                  
          return currDate;
              }

              
          /**
               * 
          @param date the date to set
               
          */

              
          public void setCurrDate(Date date) {
                  
          this.currDate = date;
              }

              
          /**
               * 
          @return the mail
               
          */

              
          public String getMail() {
                  
          return mail;
              }

              
          /**
               * 
          @param mail the mail to set
               
          */

              
          public void setMail(String mail) {
                  
          this.mail = mail;
              }

              
          /**
               * 
          @return the name
               
          */

              
          public String getName() {
                  
          return name;
              }

              
          /**
               * 
          @param name the name to set
               
          */

              
          public void setName(String name) {
                  
          this.name = name;
              }

              
          /**
               * 
          @return the url
               
          */

              
          public String getUrl() {
                  
          return url;
              }

              
          /**
               * 
          @param url the url to set
               
          */

              
          public void setUrl(String url) {
                  
          this.url = url;
              }

              
          /**
               * 
          @return the testDao
               
          */

              
          public ITestDao getTestDao() {
                  
          return testDao;
              }

              
          /**
               * 
          @return the desc
               
          */

              
          public String getDesc() {
                  
          return desc;
              }

              
          /**
               * 
          @param desc the desc to set
               
          */

              
          public void setDesc(String desc) {
                  
          this.desc = desc;
              }

          }

          七、簡單提示:屬性文件的名字類名+properties,validator配制文件的名字類名+validation.xml
          (還有其它的組合方式)
          例如對應的DbAdminAction.java
          DbAdminAction-validation.xml
          DbAdminAction.properties
          注意
          許多WebWork 標簽required 屬性和客戶端校驗沒有什么關系. 它只是在某個theme(例如xhtml)中用來在一個標識為必填的字段周圍放置一個'*'.

          八、上邊程序的示例代碼(從eclipse導出的工程)
          http://www.aygfsteel.com/Files/dreamstone/vl.rar

          posted on 2007-02-08 10:35 dreamstone 閱讀(1784) 評論(2)  編輯  收藏 所屬分類: web框架

          評論

          # re: WebWork的強大的驗證器 2007-04-24 17:48 MM

          怎么不講一講驗證小數  回復  更多評論   

          # re: WebWork的強大的驗證器 2008-07-30 14:39 huozhe

          好~ 非常感謝,,,  回復  更多評論   

          主站蜘蛛池模板: 怀安县| 荥经县| 长治市| 正阳县| 岳西县| 洛浦县| 海南省| 沅江市| 都兰县| 利川市| 两当县| 巴中市| 宿州市| 滨州市| 北川| 侯马市| 马鞍山市| 濮阳市| 塔河县| 兴安盟| 金湖县| 阜城县| 彝良县| 梓潼县| 兰考县| 嫩江县| 察雅县| 天峨县| 凤阳县| 报价| 平乐县| 崇仁县| 偏关县| 织金县| 开原市| 江西省| 兴业县| 当雄县| 丰原市| 土默特左旗| 荔波县|