隨筆 - 0, 文章 - 264, 評論 - 170, 引用 - 0
          數(shù)據(jù)加載中……

          webwork類型轉換器,int值越界時的錯誤處理

          webwork中,當從前臺傳遞一個數(shù)值,對應action中的數(shù)據(jù)類型為int時。如果傳遞的值超過int的最大值,比如,傳遞了一個333333333333,那么,在action中獲取到的值,變成了:
          -1674115755。

          原因是:webwork的類型攔截器,對數(shù)值進行了轉換。
          如果想讓后臺提示錯誤,那么需要自定義個TypeConverter,當數(shù)組越界時,拋出異常,即對應到webwork中的conversionErrors。
          我定義了個針對int類型做特殊處理的攔截器:
           1 public class IntTypeConverter extends WebWorkTypeConverter {
           2 
           3     @Override
           4     public Object convertValue(Map context, Object o, Class toClass) {
           5         if (toClass.equals(java.lang.String.class))
           6             return convertToString(context, o);
           7 
           8         if (o instanceof String[]) {
           9             if (toClass.equals(java.lang.Integer.class)) {
          10                 String[] arrays = (String[]) o;
          11                 int value = Integer.valueOf(arrays[0]);//對數(shù)字進行檢測,查看是否越界,如果越界,將自動拋java.lang.NumberFormatException
          12             }
          13             return convertFromString(context, (String[]) o, toClass);
          14         }
          15         if (o instanceof String) {
          16             if (toClass.equals(java.lang.Integer.class)) {
          17                 String[] arrays = (String[]) o;
          18                 int value = Integer.valueOf(arrays[0]);//對數(shù)字進行檢測,查看是否越界,如果越界,將自動拋java.lang.NumberFormatException
          19             }
          20             return convertFromString(context, new String[]{
          21                     (String) o
          22             }, toClass);
          23         }
          24         else
          25             return super.convertValue(context, o, toClass);
          26     }
          27 
          28     public Object convertFromString(Map map, String as[], Class class1) {
          29         return Integer.valueOf(as[0]);
          30     };
          31 
          32     public String convertToString(Map map, Object obj) {
          33         String result = null;
          34         if (obj instanceof Integer) {
          35             result = String.valueOf(obj);
          36         }
          37         return result;
          38     };
          39 
          40 }
          要讓這個類來代替webwork默認的轉換你還需要在classpath目錄, 一般就是classes目錄放置配置文件
          xwork-conversion.properties:
          java.lang.Integer=IntTypeConverter

          這種方法是對整個application起作用,.
          如果要只對單個action起作用, 在action同一個package寫一個ActionClassName-conversion.properties:
          fieldName=IntTypeConverter

          posted on 2011-11-08 14:57 小一敗涂地 閱讀(731) 評論(0)  編輯  收藏 所屬分類: jersery、struts等web框架相關

          主站蜘蛛池模板: 江北区| 阿拉善左旗| 沧源| 南岸区| 九龙坡区| 招远市| 云梦县| 郑州市| 乌拉特中旗| 京山县| 芦山县| 凤阳县| 积石山| 西乌珠穆沁旗| 巨鹿县| 彭泽县| 镇安县| 泗水县| 南召县| 监利县| 方城县| 彭泽县| 平定县| 化隆| 南江县| 浪卡子县| 望谟县| 琼结县| 嘉鱼县| 藁城市| 花莲市| 江津市| 太谷县| 阳西县| 搜索| 诏安县| 昂仁县| 巴林左旗| 项城市| 防城港市| 大荔县|