首页 > 代码库 > Struts2 莫名其妙的Invalid field value for field 的异常

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


      今天在开发系统时候,又出现了一个奇葩的Struts2 异常——Invalid field value for field [‘phId‘]

   Jsp代码:phId 的类型是Int

   	<s:hidden  name="phId" value=http://www.mamicode.com/"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=http://www.mamicode.com/"phId"/>改为‘/>还是不行!!!

 

      最后、我干脆不要struts标签了,使用了Jsp 标签改成 <input type="hidden" name="phId" value=http://www.mamicode.com/‘‘/> >

 

结果、、、结果万万没想到居然接收到phId 的数据了。这个struts 标签的一个dug 嘛!由于工作进度的要求, 我就不一阿斗的精神追问为什么了!!!  如果大家帮有什么好见解和意见,欢迎评论,我们一起分享一下!!