隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊(cè)

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827222
          • 排名 - 49

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          webwork提供了強(qiáng)大的驗(yàn)證功能,下邊一一介紹一些常用的功能的用法。
          一,首先webwork的validator是基于攔截器的,所以首先要配制一下攔截器,默認(rèn)的攔截器,已經(jīng)
          使用了validator,如果你想定義自己的攔截器組合,記得在你的攔截器的stack中把這句話加入
          <interceptor-ref name="validation">
              
          <param name="excludeMethods">
                  input,back,cancel,browse
              
          </param>
          </interceptor-ref>
          二、是否使用自定義Validator:在一般情況下webwork提供的Validator已經(jīng)能應(yīng)付大多數(shù)問(wèn)題,
          但是如果你想自己定義,那么記得注冊(cè)你的驗(yàn)證器(Validator),一個(gè)簡(jiǎn)單的注冊(cè)辦法是
          添加一個(gè)文件名為 validators.xml 的文件在你的classpath (/WEB-INF/classes) 的根目錄下
          文件中的內(nèi)容類似如下:
          <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如果已經(jīng)定義了,那么它應(yīng)該在classpath中可以找到.然而如果不需要自定義的校驗(yàn)器,那么這不是必須的.WebWork會(huì)自動(dòng)從發(fā)布包里的
          xwork jar文件中取得一個(gè)事先定義好的校驗(yàn)器集合(com/opensymphony/xwork/validator/validators/default.xml).
          瀏覽ValidatorFactory的static塊來(lái)了解詳細(xì)信息
          2,如果自定義的校驗(yàn)器被定義了而且創(chuàng)建了一個(gè)validators.xml文件并放在classpath中,
          記得復(fù)制所有其他你需要的預(yù)定義的校驗(yàn)器到validators.xml里,如果你不需要注冊(cè)則不需要.
          一旦validators.xml在classpath里被檢測(cè)到,缺省的 (com/opensymphony/xwork/validator/validators/default.xml)
          就不會(huì)被裝載了.只有沒(méi)發(fā)現(xiàn)自定義 validators.xml的時(shí)候才會(huì)裝載.要小心.這點(diǎn)類似Java中的缺省構(gòu)造函數(shù)

          三、定義校驗(yàn)規(guī)則
          <!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>
                      
          <!--提示的錯(cuò)誤信息-->
                      
          <message>You must enter a name</message>
                  
          </field-validator>
              
          </field>
              
          <field name="currDate">
                  
          <field-validator type="date">
                      
          <!--最小時(shí)間-->
                      
          <param name="min">01/01/2007</param>
                      
          <!--最大時(shí)間-->
                      
          <param name="max">02/28/2007</param>
                      
          <!--提示的錯(cuò)誤信息-->
                      
          <message>
                          The date must be between 
          01-01-2007 and 02-28-2007.
                      
          </message>
                  
          </field-validator>
              
          </field>
              
          <field name="url">
                  
          <!--short-circuit是否短路檢驗(yàn),類似&&運(yùn)算的短路算法-->
                  
          <field-validator type="required" short-circuit="true">
                      
          <!--提示的錯(cuò)誤信息-->
                      
          <message>You must enter a value for url.</message>
                  
          </field-validator>
                  
          <!--webwork提供的url驗(yàn)證-->
                  
          <field-validator type="url" short-circuit="true">
                      
          <!--提示的錯(cuò)誤信息-->
                      
          <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的驗(yàn)證,驗(yàn)證器由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中可以用表達(dá)式取出值棧中的值例如${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>
                  
          <!--可以使用正則表達(dá)式-->
                  
          <field-validator type="regex">
                      
          <param name="expression">
                          
          <![CDATA[([a-z][0-9][A-Z][x])]]>
                      
          </param>
                      
          <!--message可以由固定的字符串,值棧中的值${desc}以及通過(guò)調(diào)用方法取到的
                      屬性文件中的值$
          {getText('my.key')}-->
                      
          <message>
                          
          "regex error ${getText('my.key')} ${desc}"
                      
          </message>
                  
          </field-validator>
              
          </field>
              
          <!--上邊的驗(yàn)證叫字段驗(yàn)證,下邊這些驗(yàn)證叫普通驗(yàn)證,普通驗(yàn)證是優(yōu)于字段驗(yàn)證的。
              在使用短路的時(shí)候要小心
          -->
              
          <!--上邊那些都是基于字段的驗(yàn)證,這個(gè)是基于Action的驗(yàn)證
              如果要在頁(yè)面顯示這些消息,需要加入
          <ww:actionError/>
              
          -->
              
          <validator type="expression">
                  
          <!--可以基于表達(dá)式的驗(yàn)證name.equals(desc)-->
                  
          <param name="expression">name.equals(desc)</param>
                  
          <message>name not the same as desc</message>
              
          </validator>
              
          <!-- Plain Validator 2 -->
              
          <!--可以基于表達(dá)式的驗(yàn)證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>

          四、客戶端驗(yàn)證
          加入validate="true"
          <ww:form name="test" action="javascriptValidation" validate="true">
            ...
          </ww:form>
          這樣的話webwork會(huì)根據(jù)你的服務(wù)器端的驗(yàn)證,對(duì)應(yīng)生成javaScript的驗(yàn)證,而且提示信息和服務(wù)器端
          驗(yàn)證的方式一樣,而不是alert的方式顯示。(前題是你使用的都是標(biāo)準(zhǔn)的驗(yàn)證器)
          五、
          對(duì)應(yīng)上邊驗(yàn)證器的web頁(yè)面


          <%@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>
                  
          <!--  
                  如果想統(tǒng)一的顯示所有的Erro打開(kāi)下邊這句
                  
          <ww:fielderror />
                  如果想顯示其中一個(gè)Error打開(kāi)下邊這句,默認(rèn)顯示在字段的正上方
                  
          <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>
          六、對(duì)應(yīng)上邊的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;
              }

          }

          七、簡(jiǎn)單提示:屬性文件的名字類名+properties,validator配制文件的名字類名+validation.xml
          (還有其它的組合方式)
          例如對(duì)應(yīng)的DbAdminAction.java
          DbAdminAction-validation.xml
          DbAdminAction.properties
          注意
          許多WebWork 標(biāo)簽的 required 屬性和客戶端校驗(yàn)沒(méi)有什么關(guān)系. 它只是在某個(gè)theme(例如xhtml)中用來(lái)在一個(gè)標(biāo)識(shí)為必填的字段周圍放置一個(gè)'*'.

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



          posted on 2007-08-24 15:36 Ke 閱讀(405) 評(píng)論(0)  編輯  收藏 所屬分類: webwork
          主站蜘蛛池模板: 延安市| 合水县| 五峰| 长春市| 南宫市| 普格县| 台南市| 姜堰市| 文登市| 桦川县| 桐城市| 长沙县| 荆门市| 宾川县| 保山市| 临澧县| 兴山县| 龙岩市| 石景山区| 绥芬河市| 南漳县| 太仓市| 沙河市| 都江堰市| 福海县| 高安市| 望都县| 绥阳县| 古田县| 江孜县| 彰武县| 屏山县| 乐亭县| 阳信县| 通海县| 哈巴河县| 房山区| 淮北市| 清丰县| 大冶市| 梓潼县|