1

JSF2 にアップグレードした後 (おそらく)、.xhtmlファイル内に 1 つの特別なアクセサーが生成されますIllegalArgumentExceptionsが、その理由がわかりません。ローカル JBoss (4.2.2) でアプリを実行してもこの例外は生成されませんが、これはデバッグ データとライブ データの違いに関連している可能性があります。

本番サーバーのログから抽出できる次のスタック トレースが生成されます。

Caused by: javax.el.ELException: /xy/xy-subtemplate1.xhtml @131,45 value="#{someClass.someProperty}": java.lang.IllegalArgumentException
    at com.sun.facelets.el.TagValueExpression.setValue(TagValueExpression.java:101)
    at javax.faces.component.UIInput.updateModel(UIInput.java:818)
    ... 36 more
Caused by: java.lang.IllegalArgumentException
    at sun.reflect.GeneratedMethodAccessor1134.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at javax.el.BeanELResolver.setValue(BeanELResolver.java:108)
    at com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255)
    at com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281)
    at org.apache.el.parser.AstValue.setValue(AstValue.java:114)
    at org.apache.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:249)
    at com.sun.facelets.el.TagValueExpression.setValue(TagValueExpression.java:93)
    ... 37 more

someClassはリスト内で反復処理されており、アクセスする次のメソッドがありますsomeProperty:

public int getSomeProperty() {
    return this.getSomeRelatedEnum().ordinal();
}

public void setSomeProperty( final int index) {
    this.setSomeRelatedEnum( SomeRelatedEnum.fromOrdinal( index) );
}

IllegalArgumentExceptionこれはどのようにして上記につながるのでしょうか?

4

1 に答える 1

1

これは、setterメソッドが、EL以降で提供される引数タイプとは異なる引数タイプを予期している場合に発生する可能性があります。

ELのハードコードされた/変換されていない数値は、デフォルトではとしてではなくとして扱われるという事実に関連していると思います。をに変更するか、そのように入力コンポーネントに明示的な整数コンバーターを提供してみてください。longintintlong<h:someInput converter="javax.faces.Integer">

ちなみに、列挙型自体を直接取得/設定してみませんか?序数で列挙型を取得/設定するのは厄介です。

于 2012-07-20T04:00:36.803 に答える