1

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)}" です。

4

2 に答える 2

0

あなたが抱えている問題を再現しようとしました。RequestScoped単一のプロパティを持つ単純な Bean を作成しました。

public class IndexBean {
    private int value;

    public void setValue(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

#次に、属性内で遅延式(で始まる式)を使用するとtarget...

<c:set target="#{indexBean}" property="value" value="5"/>
<h:outputText value="#{indexBean.value}"/>

...JSP 例外を受け取りました。

動的属性に遅延式を指定することは不正です。

...これにより、式をすぐに評価されるように変更しました。

<c:set target="${indexBean}" property="value" value="5"/>
<h:outputText value="#{indexBean.value}"/>

...そして、値は画面に正しく表示されました。

于 2013-09-11T09:34:10.610 に答える
0

を使用してはfmt:formatNumberどうですか?

<fmt:formatNumber var="i" type="number" value="3" />
<c:set target="#{mybean}" property="size" value="${i}"/>
于 2013-09-12T17:07:40.283 に答える