JSF 2.1 facelets 環境で、int タイプの Bean プロパティを設定したいと思います。
facelets テンプレート:
<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)}" です。