先看看这个
<s:param name="category.id" value="id" />
没啥问题吧?
的确,如果id这个属性是基本类型,int/long/String等等,这种写法当然没有任何问题。
但是!
如果id这个属性是一个非基本类型,比如任何自定义的类型,这样struts2内置的类型转换器将无法处理这个转换,你可以写一个类型转换器,自己google一下,介绍很多。
但是但是!
如果会发现在action中是无法获取到这个id属性的,打开verbose,出现一个struts2强制转换成了String,没有setId(java.lang.String)方法的异常。
如何解决?
改成
<s:param name="category.id"><s:property value="id" /></s:param>
即可。
为什么?
如果直接使用value="id",虽然会调用自定义的类型转换器,但是在构造action bean的时候仍然使用的是默认的类型转换器。