好吧。直接进入正题。
...
比如一个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类比较常用 。 嘿嘿 。。