今天在开发系统时候,又出现了一个奇葩的Struts2 异常——Invalid field value for field ['phId']
Jsp代码:phId 的类型是Int
Action 中用来接收的属性值:
private Integer phId;
//此处省略了Getter/Setter方法
按常理来说、应该是可以接收到数据的; 难道人品差原因嘛!Action 里面phId 一直是空值 。
网上查一遍资料,
大家普遍说是在Struts.xml 少了一个
或是属性名称写错了,我再三检查我的属性值和类型并重新生成Getting/Settring方法,没有什么问题啊(注明:建议大家去copy ,可以减少不必要的失误)
我就开始琢磨着了,String 类型转换为Int类型错误;那我自己写一个转换器来实现String 到Int类型转换;
我查一个下api ,原来xwork已经为我们封装好了一些简单的基本类型。只有一些复杂的类型转换是根据自己的需要来动手写的。 以下是转换器的简单代码
public class MyIntegerConverter extends DefaultTypeConverter{
@Override
public Object convertValue(Map context, Object value,
Class toType) {
// 将Map转换为Object 对象
return super.convertValue(context, value, toType);
}
@Override
public Object convertValue(Map context, Object target,
Member member, String propertyName, Object value, Class toType) {
// 将Map转换为Object 对象
return super.convertValue(context, target, member, propertyName, value, toType);
}
@Override
public Enum> enumValue(Class toClass, Object o) {
// 将一个Object 对象转换为Enumeration 枚举类型
return super.enumValue(toClass, o);
}
@Override
protected Locale getLocale(Map context) {
// 将Map 对象本地化
return super.getLocale(context);
}
@Override
public TypeConverter getTypeConverter(Map context) {
// 将Map 对象转换为转换器类型
return super.getTypeConverter(context);
}
@Override
public Object convertValue(Object value, Class toType) {
if(toType == Phone.class){
Phone phoneBean = new Phone();
phoneBean.setId((int) value);
return phoneBean;
}
if(toType == String.class) {
return value.toString();
}
return super.convertValue(value, toType);
}
}
到这个时间我就纳闷了、我就开始尝试各种写法了;
将原来的
最后、我干脆不要struts标签了,使用了Jsp 标签改成
结果、、、结果万万没想到居然接收到phId 的数据了。这个struts 标签的一个dug 嘛!由于工作进度的要求, 我就不一阿斗的精神追问为什么了!!! 如果大家帮有什么好见解和意见,欢迎评论,我们一起分享一下!!