好吧。直接进入正题。
...
比如一个Action里的user属性是个User对象。 有name和password两个属性
如果我们传入 user=zhangsan,123这样的属性时,肯定会出错。因为user是个对象。
这样,我们就可以用类型装换了。
写一个类继承StrutsTypeConverter。 代码如下:
package fj.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import fj.model.User;
public class UserConverter extends StrutsTypeConverter{
@Override
public Object convertFromString(Map arg0, String[] values, Class toClass) {
String[] data = values[1].split(",");
User u = new User();
u.setName(data[0]);
u.setPassword(data[1]);
return u;
}
@Override
public String convertToString(Map arg0, Object o) {
return o.toString();
}
}
这样传过来的属性时zhangsan,123的话我们就可以处理了。
这里要注意一点的是values这个参数是代表输入的属性的值如果有多个的情况所代表的数组。
比如输入 user=zhangsan,123&user=lisi,123这样。 那上面的代码会取出第二个人lisi的数据。
然后具体问题具体分析 .....
还有一点写完了自定义转换类之后需要注册。 有两种注册方法 局部和全局。
全局的话在src目录下建立一个 xwork-conversion.properties文件 里面写入user = fj.converter.UserConverter。
这里的user是action里的一个属性。。
第二种方法是局部注册。在action的包里建立一个的文件。
文件名比如是action名-conversion.properties...
听说还有一种Annotaion的注册方法 。 不过还没研究 ...
在补充一点..
类型转换还有另外一种方式。实现 TypeConverter接口。。。
不常用。 继承StrutsTypeConverter类比较常用 。 嘿嘿 。。