JAVA牛棚

          我們愛JAVA

          常用鏈接

          統(tǒng)計

          群友的BLOG

          最新評論

          [Struts]處理表單中值為空的日期類型字段 轉(zhuǎn)自《博客園》八進(jìn)制

          作者:tendre
          在示范中心項目中,我們把ActionForm中日期類型的字段指定為String類型,而在對應(yīng)的JavaBean中指定為java.sql.Date類型。當(dāng)用戶提交表單的時候,在Action里使用BeanUtils.copyProperties()方法從ActionForm構(gòu)造JavaBean對象(詳見利用BeanUtils在對象間復(fù)制屬性)。這個方法在大部分時候都很好,但有一個問題,就是當(dāng)用戶沒有填寫日期類型字段時(而該字段并非必填),validator不會提出警告,而在copyProperties()時會報類型轉(zhuǎn)換異常,原因是這時ActionForm中的該字段的值是空字符串(""),負(fù)責(zé)字符串向Date轉(zhuǎn)換的SqlDateConverter類調(diào)用Date.valueOf("")方法,顯然""是無法轉(zhuǎn)換為日期的,所以會拋出異常。

          通過查看代碼和資料,我發(fā)現(xiàn)這個問題的解決方法其實(shí)非常簡單。只要把帶缺省值參數(shù)的SqlDateConverter重新注冊一下,覆蓋原有的注冊信息就可以了,這個注冊語句一般是寫在系統(tǒng)初試化的地方,對于Struts應(yīng)用程序,當(dāng)然做在PlugIn里最方便。代碼如下:


          package etc;

          import javax.servlet.ServletException;
          import org.apache.commons.beanutils.ConvertUtils;
          import org.apache.commons.beanutils.converters.SqlDateConverter;
          import org.apache.struts.action.ActionServlet;
          import org.apache.struts.action.PlugIn;
          import org.apache.struts.config.ModuleConfig;

          public class ConverterPlugIn implements PlugIn{

              public void init(ActionServlet servlet, ModuleConfig config) throws ServletException {
                  ConvertUtils.register(new SqlDateConverter(null),java.sql.Date.class);
              }

              public void destroy() {
                  ConvertUtils.deregister();
              }
          }

          注意SqlDateConverter的構(gòu)造方法是帶有參數(shù)null的,這表示遇到不能解析的字符串就返回空值。而deregister()方法的作用是恢復(fù)ConvertUtils的缺省注冊表。為了使這個PlugIn起作用,要在struts-config.xml里增加一句話:

          <plug-in className="etc.ConverterPlugIn" />
          日期字段往往會給我們的開發(fā)帶來麻煩,其實(shí)在Struts應(yīng)用程序里,只要把這些轉(zhuǎn)換類搞熟了,總可以找到很方便的辦法。常見的問題還有如何指定日期輸入格式,怎樣處理java.util.Date的轉(zhuǎn)換,等等,在這個鏈接里有解決這些問題的方法,道理都是一樣的。

          posted on 2005-10-26 16:01 JAVA牛棚 閱讀(1709) 評論(0)  編輯  收藏 所屬分類: struts

          主站蜘蛛池模板: 诸暨市| 遵义市| 临夏市| 汽车| 乌鲁木齐县| 邢台县| 玉山县| 铜梁县| 土默特左旗| 泉州市| 丰都县| 兴业县| 读书| 汾西县| 上犹县| 南靖县| 邵武市| 柳林县| 堆龙德庆县| 西盟| 墨脱县| 石门县| 涿州市| 西安市| 安化县| 广昌县| 祁连县| 咸宁市| 克拉玛依市| 会理县| 扎赉特旗| 修武县| 新泰市| 织金县| 道真| 额济纳旗| 金乡县| 沂水县| 龙山县| 四川省| 黔江区|