乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      apache commons

       wtf_soft 2006-04-19
      apache commons項目大家都應該有或多或少的了解了,目前它在其他許多開源項目中被廣泛得應用,基本上已經成為項目開發(fā)的一些基本(工具)類,像其中對字符串的處理、對日期、數字的處理,對javabean的處理、以及對xml和模板的處理等,都為項目開發(fā)提供了很大的方便。希望大家也將這些工具類應用到自己的日常開發(fā)中來。下面僅舉幾例,實際的用途要更為廣泛得多:
      • 判斷一個字符串(str)是否為空

         我們習慣的做法:
         if(str!=null&&!str.equals("")){
             ...
         }
         通過commcons StringUtils:
         if(StringUtils.isNotBlank(str)){
             ...
         }
      • 計算一個字符串(str1)在另一個字符串(str2)中出現的次數

         我們習慣的做法:使用substring方法依次往下查找,直至查出所有的為止,個數也就計算了處理。
         通過commons StringUtils:
         int matchCount=StringUtils.countMatches(str2,str1);
      • 在項目中經常遇到這樣的問題:在信息列表中,每一行信息(str)最多顯示n個字符,如果超過,則折行或使用...來表示超出部分

         我們習慣的做法:通過折行解決該問題,因為用...方式可能會涉及漢字的字符計算問題,經常會將一個漢字截為兩半的情況。
         通過commons StringUtils 我們可以生成用...表示超出部分的字符串:
         String aStr=StringUtils.abbreviate(str,n);
         放心,不用考慮漢字問題!
         

       

      • 打印一個數組(array)中的值

         我們通常的做法://通常的做法可能有更好的
         String str="[";
         for(int i=0;i<array.length;i++){
            str+=array[i]+",";
            if(i==array.length-1){
                str+=array[i];
            }
         }
         str+="]";
         return str;
         通過使用commons ArrayUtils:
         return ArrayUtils.toString(array);
         直接了當
      • 將一組bean按照其某個屬性(propertyName)進行排序

          我們通常的做法:實現一個Comparator接口(在compare方法還要使用commons PropertyUtils來取bean的屬性值),然后通過Collections的sort排序
          通過使用commons beanutils:
          Collections.sort(list, new BeanComparator(propertyName));
      • 在一個Map中,如果知道keys和values都是唯一的,希望既可以通過key來獲取value,也希望可以通過value來獲取key

          我們通常的做法:生成兩個map,一個是正常的key、value方式,一個是反過來的value、key方式
           通過使用commns collections:
           BidiMap map=new DualHashMap();
          map.get(key)或map.inverseBidiMap().get(value)
      • 希望在一個List中只能存儲某個類型的對象,例如只能存儲字符串類型

          我們通過的做法:在向List加入值之前進行instanceof判斷
          通過使用commons collections:
          List l=TypedList.decorator(new ArrayList(),String.class);
      • 有一個xml配置文件,服務器啟動時將其讀入,并解析xml生成各個相關的對象

          例如:
          <?xml version=1.0 encoding=utf-?>
          <users>
              <user>
                 <name>zhangsan</name>
                 <sex>male</sex>
                 <job>
                    <name>software engineer<name>
                    <salary>10000</salary>
                 </job>
              </user>
              ...
          </users>
          我們通常的做法:通過w3c dom或jdom或sax等讀取并解析xml,然后根據xml手工創(chuàng)建相應的對象,并初始化對象之間的關系(例如user和job兩個對象對象之
      間的關系)
           通過使用commons digester:通過設置讀取規(guī)則,digester按照xml和規(guī)則描述,自動實例化對象并初始化對象之間的關系。     
      • 解析自己定義的表達式,例如希望某些東西能夠使用并解析類似這樣的表達式$ {user.name=="zhangsan"&&user.job.salary>6000}

          我們通過的做法:可能會引用bsf來做
          通過使用commons jexl:
          Expression e = ExpressionFactory.createExpressionexpr );//expr即為表達式
         JexlContext jc = JexlHelper.createContext( );
         jc.getVars( ).put("user", user);//user即為程序中已經存在的bean對象
          ...
      推薦書籍:OReilly.Jakarta.Commons.Cookbook.Nov.2004.eBook-DDU.chm

      validwhen主要用于關聯驗證,即為了驗證某個域的值,可能會參考其它域的值來進行綜合判斷,以確定該域的值是否符合要求。

      1,表達式及其注意事項

      輸入給validwhen的是一個布爾型表達式(對該表達式的解析使用了antlr),其引用名為test,即形如:

      <var>
        <var-name>test</var-name>
        <var-value>expression</var-name>
      </var>

      即,當expression為真(true)時,該域驗證通過,其中,expression可以使用的元素包括:

      1)表單中其它域屬性的名稱,例如:
      <var>
        <var-name>test</var-name>
        <var-value>(color=="red")</var-name>
      </var>
      例子中color為表單中其它某個域的屬性名。

      2)*this*,用于表示該域的屬性名稱,即對正在驗證的屬性自身,其變量的引用為*this*,例如:
      <var>
        <var-name>test</var-name>
        <var-value>((color=="red") and (*this* != null))</var-name>
      </var>

      3)可以使用一些常規(guī)運算符,如 >、<、==、>=、<=、!=、+、-、*、/、%等等。例如:
      <var>
        <var-name>test</var-name>
        <var-value>((color=="red") and (age>=25))</var-name>
      </var>

      4)可以使用邏輯運算 and 、or,例如:
      <var>
        <var-name>test</var-name>
        <var-value>(((color=="red") and (age>=25)) or (color!="red"))</var-name>
      </var>
      在使用and和or時要注意一點,在同一級的邏輯運算中,同時只能存在一個邏輯運算符,要么是and,要么是or,即:
      xxx and yyy
      或者
      xxx or yyy
      如果在同一級出現多于一個的and或or或and和or的組合,那么是不合法的,例如下面的表達式是不合法的:
      xxx and yyy and zzz
      或者
      xxx or yyy or zzz
      或者
      xxx and yyy or zzz
      等等
      為了讓復雜的表達變得合法,可以讓一個復雜的表達式變?yōu)槎嗉壍谋磉_形式,每一級只有一個and或一個or就可以了,例如:
      xxx and yyy and zzz是錯誤的,進行一下簡單的變換:
      (xxx and yyy) and zzz或者xxx and (yyy and zzz)等都是合法的。

      5)其他合法的輸入,例如可以使用雙引號和單引號引用literal字符串等等。

      2,錯誤消息的定制

      無論是validwhen還是其它驗證例程,都可以定制驗證出錯后的錯誤信息,定制消息有兩種方式,即全局方式和本地方式。

      1)全局方式,即在validator-rules.xml中某個validator里面定義的消息,參數名為msg,例如:


      <validator name="email"
                  classname="org.apache.struts.validator.FieldChecks"
                     method="validateEmail"
               methodParams="java.lang.Object,
                             org.apache.commons.validator.ValidatorAction,
                             org.apache.commons.validator.Field,
                             org.apache.struts.action.ActionMessages,
                             org.apache.commons.validator.Validator,
                             javax.servlet.http.HttpServletRequest"
                    depends=""
                        msg="errors.email"/>

      其中,msg的值為resource bundle中的一個屬性名

      。例如在resource bundle文件中存在如下定義:
      errors.email={0} is an invalid e-mail address.

       

      2)本地方式,即在validation.xml中的field中定義的錯誤消息,格式為:
      <msg name="validatorName" key="value" resource="booleanValue"/>
      例如:

                   <field property="endDate"
                          depends="validwhen">
                      <msg name="validwhen" key="date.validwhen"/>
                      <arg0 key="start time" resource="false"/>
                      <arg1 key="end time" resource="false"/>
                      <var>
                           <var-name>test</var-name> 
                           <var-value>((*this* != nulland (*this*>startDate))</var-value>
                      </var>
                   </field>

      這里需要注意的是
      * <msg>的name屬性的值應該為某個驗證例程的名稱,例如name="required"、name="date"等,這指明了當該field的該驗證例程(例如required、date等)出錯時所顯示的錯誤信息。
      *如果全局已經定義了msg的信息,而且本地的msg的key與全局的msg的key相同,那么在該field的驗證中,本地的msg將覆蓋全局的msg。
      *<arg0>到<arg4>的屬性中也有name屬性,即該arg參數所應用的驗證例程,例如<arg0 name="date" key="label.startDate"/>,即該參數用于date驗證的出錯信息。注意,對于一個field,需要的驗證規(guī)則有時不止一個,例如depends="required,date",而多個驗證規(guī)則中的每一個都需要出錯時傳入一些參數信息,如果它們所需要的參數個數、名稱和順序都相同,那么只要定義<arg0...、<arg1...等等即可。但是如果它們需要的參數的個數、名稱和順序不同怎么辦,如果我們對于第一個輸入參數只定義一個arg0,那么這個arg0用于哪個驗證消息,因此這時必須通過arg標簽的name屬性來表示該參數所服務的驗證。

      3,例子

      場景:在一個表單中,有兩個文本域,用于得到一個時間段,一個文本域輸入起始日期(startDate),另一個輸入終止日期(endDate)。
      約束:日期格式為:年(四位數)-月(兩位數)-日(兩位數),而且終止日期大于起始日期。

      根據上述條件,驗證規(guī)則如下:

      <field property="startDate"
          depends="date">
          <arg0 key="form.date.start"/>
          <var>
              <var-name>datePatternStrict</var-name>
              <var-value>yyyy-MM-dd</var-value>
          </var>
      </field>
      <field property="endDate"
          depends="validwhen,date">
          <msg name="validwhen" key="date.validwhen"/>
          <arg0 name="validwhen" key="form.date.start"/>
          <arg1 name="validwhen" key="form.date.end"/>
          <arg0 name="date" key="form.date.end"/>
          <var>
              <var-name>test</var-name>
              <var-value>((*this* != nulland (*this*>startDate))</var-value>
          </var>
          <var>
              <var-name>datePatternStrict</var-name>
              <var-value>yyyy-MM-dd</var-value>
          </var>
      </field> 

      在資源文件中加入如下message:

       

      form.date.start=起始日期
      form.date.end=終止日期
      date.validwhen= {0}不能大于{1}!

      目前為了在jsp中調試信息,往往會使用System.out.println的方式打印消息,這種方式不是很雅觀,為了解決這個問題,
      在includes/CommonsTaglib.jsp中加入了apache的log標簽,使用很簡單!
      • 語法格式
        • <log:logAction category=categoryStr message=messageStr/>
        • <log:logAction category=categoryStr>messageStr</log>
      • 語法含義
        • loglogAction分為
          • debug - Displays a debug-level message
          • info - Displays a info-level message
          • warn - Displays a warn-level message
          • error - Displays a error-level message
          • fatal - Displays a fatal message, usually as the application is about to terminate
          • dump - Displays all vars in the specified scope
        • category是log的類別,即該log屬于哪個類或資源擁有,在java文件中我們通常將java類自身的class賦給category,在jsp中我們可以將包含該文件名的資源路徑賦給category,例如

         <log:debug category="admin/resources/application/application.jsp">
            now into application.jsp
         </log>
      附:

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多