今天在开发系统时候,又出现了一个奇葩的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 嘛!由于工作进度的要求, 我就不一阿斗的精神追问为什么了!!! 如果大家帮有什么好见解和意见,欢迎评论,我们一起分享一下!!
Struts2 莫名其妙的Invalid field value for field 的异常