隨筆 - 0, 文章 - 264, 評論 - 170, 引用 - 0
          數據加載中……

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

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

          原因是:webwork的類型攔截器,對數值進行了轉換。
          如果想讓后臺提示錯誤,那么需要自定義個TypeConverter,當數組越界時,拋出異常,即對應到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]);//對數字進行檢測,查看是否越界,如果越界,將自動拋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]);//對數字進行檢測,查看是否越界,如果越界,將自動拋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 小一敗涂地 閱讀(728) 評論(0)  編輯  收藏 所屬分類: jersery、struts等web框架相關

          主站蜘蛛池模板: 靖州| 西充县| 石泉县| 泗洪县| 航空| 余庆县| 桓台县| 冷水江市| 南投县| 阜南县| 博野县| 师宗县| 信阳市| 宁海县| 鱼台县| 鄂托克旗| 丰台区| 新建县| 庆城县| 全椒县| 三台县| 唐山市| 休宁县| 五莲县| 晴隆县| 东城区| 卢湾区| 确山县| 四川省| 错那县| 舟曲县| 南华县| 崇州市| 丹寨县| 宜丰县| 富阳市| 城步| 黄梅县| 隆化县| 攀枝花市| 长顺县|