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