随笔 - 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 小一败涂地 阅读(703) 评论(0)  编辑  收藏 所属分类: jersery、struts等web框架相关


只有注册用户登录后才能发表评论。


网站导航: