类型转换拦截器:把参数转换为action使用的格式,从客户端传过来的任何数据都是字符串类型的,struts2提供了一些转换器,如:字符串转整数,字符串转集合,字符串转日期。然而有些类型struts2并不能帮我们转换。这时需要自定义类型转换器。
字符串转各种类型的工程下载地址如下:http://download.csdn.net/source/2883615
自定义类型转换器:
1.写一个类型转换器:
//这是一个java.awt.Point的类型转换器
package com.xie.convertors;
import java.awt.Point;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class PointConvertor extends DefaultTypeConverter {
@Override
public Object convertValue(Object value, Class toType) {
if (toType==Point.class) {
Point p=new Point();
String[] str=(String[]) value;
String[] xy=str[0].split(",");
p.x=Integer.parseInt(xy[0]);
p.y=Integer.parseInt(xy[1]);
return p;
}
return super.convertValue(value, toType);
}
}
2.注册类型转换器:
有三种方法,注册局部转换器:命名规范:ationname-conversion.properties(actionname必须与对应的action的名字一样),存放路径:与action的在同一路径,文件内容:p=com.xie.conver.PointConvertor(p是action的成员变量,当struts2的默认类型转换器无法处理p时,就交给com.xie.conver.PointConvertor类型转换器处理)
注册全局转换器:命名规范:xwork-conversion.properties(这是固定写法),存放路径:位于src目录下,文件内容:java.awt.Point=com.xie.convertors.PointConvertor(前边是遇到struts2不能自动转换的类型,后边是指定的这种类型的自定义转换器)
注解指定自定义转换器:查了struts2.2.1的帮助文档,没有发现注解指定转换器。所以我不知道。
这儿通常会出现如下异常:
Jsp前端错误提示:
Struts has detected an unhandled exception:
Messages: | · No result defined for action com.xie.interceptor.InterceptorAction and result input |
通常是struts2默认类型转换失败,同时没有找到自定义的转换器。
后台错误提示
Error setting expression 'p' with value '[Ljava.lang.String;@a498d0'
ognl.MethodFailedException: Method "setP" failed for object com.xie.convertor.action.Convertor@e426a3 [java.lang.NoSuchMethodException: com.xie.convertor.action.Convertor.setP([Ljava.lang.String;)]
这个错误是:没有找到setP(String)方法,即转换失败。