在我的 JSF 2.1 facelets 环境中,我想设置一个 int 类型的 bean 属性:
小面模板:
<c:set target="#{mybean}" property="size" value="3"/>
java二传手:
public void setSize(int size){
this.size = size;
}
但它抛出了一个异常:
javax.el.ELException: Can't set property 'size' on class 'MyBean' to value '3'.
at javax.el.BeanELResolver.setValue(BeanELResolver.java:398)
...
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
查看 BeanELResolver 的代码,我注意到值“3”很遗憾只是简单地传递给了 setter 方法而没有任何强制,这显然不起作用。遗憾的是 BeanELResolver 没有利用它那里拥有的类型知识。
有没有办法以某种方式将值强制为 int ?我已经尝试过 value="#{3}" 但这会产生一个 Long。接下来我想到的是 value="#{f:toInt(3)}" 使用自定义函数。