您的位置:首页 > 编程语言 > Java开发

Struts2 莫名其妙的Invalid field value for field 的异常

2014-08-19 11:20 441 查看
今天在开发系统时候,又出现了一个奇葩的Struts2 异常——Invalid field value for field ['phId']

Jsp代码:phId 的类型是Int

<s:hidden  name="phId" value="phId"/>

Action 中用来接收的属性值:

private Integer phId;

//此处省略了Getter/Setter方法


按常理来说、应该是可以接收到数据的; 难道人品差原因嘛!Action 里面phId 一直是空值 。

网上查一遍资料,

大家普遍说是在Struts.xml 少了一个<result name="input">/***.jsp</result>

或是属性名称写错了,我再三检查我的属性值和类型并重新生成Getting/Settring方法,没有什么问题啊(注明:建议大家去copy ,可以减少不必要的失误)

我就开始琢磨着了,String 类型转换为Int类型错误;那我自己写一个转换器来实现String 到Int类型转换;

我查一个下api ,原来xwork已经为我们封装好了一些简单的基本类型。只有一些复杂的类型转换是根据自己的需要来动手写的。 以下是转换器的简单代码

public class MyIntegerConverter extends DefaultTypeConverter{

@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
// 将Map转换为Object 对象
return super.convertValue(context, value, toType);
}

@Override
public Object convertValue(Map<String, Object> 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<String, Object> context) {
// 将Map 对象本地化
return super.getLocale(context);
}

@Override
public TypeConverter getTypeConverter(Map<String, Object> 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);
}

}


到这个时间我就纳闷了、我就开始尝试各种写法了;

将原来的<s:hidden name="phId" value="phId"/>改为<s:hidden name="phId" value='<s:property value="phId"/>'/>还是不行!!!

最后、我干脆不要struts标签了,使用了Jsp 标签改成 <input type="hidden" name="phId" value='<s:property value="phId"/>'/>

结果、、、结果万万没想到居然接收到phId 的数据了。这个struts 标签的一个dug 嘛!由于工作进度的要求, 我就不一阿斗的精神追问为什么了!!! 如果大家帮有什么好见解和意见,欢迎评论,我们一起分享一下!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐