0

テーブルの長さをJavaScriptjavax.el.PropertyNotWritableExceptionの非表示の入力に保存しようとすると、次のようになります。

Caused by: javax.el.PropertyNotWritableException: /view/ci/buttons.xhtml at line 34 and column 73 value="#{fn:length(order.phases)}": Illegal Syntax for Set Operation
    at org.apache.myfaces.view.facelets.el.TagValueExpression.setValue(TagValueExpression.java:125)

JSF:

<h:inputHidden id="phasesCount" value="#{fn:length(order.phases)}"/>

そのエラーがわかりません。fn:length は読み取り専用操作でサポートされていますか、何か不足していますか?

4

2 に答える 2

3

この動作は完全に予期されたものです。フォーム送信時<h:inputHidden>にも処理されます。これにより、特に JavaScript による非表示の値の操作が可能になります。ただし、EL 関数呼び出しは有効なセッター メソッド操作ではありません。したがって、この例外。他のすべてのUIInputコンポーネントと同様に、値は完全な Bean プロパティでなければなりません。

変数を JavaScript に渡すという具体的な機能要件を考えると、これ<h:inputHidden>は実際にはジョブにとって不適切なツールです。代わりに、JS 変数であるかのように JSF に出力させます。

<script>var phasesCount = #{fn:length(order.phases)};</script>

または、サーバー側で完全に使用されていなくても、非表示の入力要素が本当に必要な場合は、代わりにプレーンな HTML 要素を使用します。

<input type="hidden" id="phasesCount" value="#{fn:length(order.phases)}" />

同じジョブに対して完全に任意の HTML 要素または属性を使用できることに注意してください。

<div id="phasesCount" data-phasesCount="#{fn:length(order.phases)}">

この値は、JS によってもアクセスできます。

于 2013-01-21T18:33:16.683 に答える
0
<h:inputHidden id="phasesCount" value="#{fn:length(order.phases)}"/>

inputHidden入力コントロールです。フォームが送信されると、JSF はこの式でsetValueを呼び出そうとします。

于 2013-01-21T16:31:58.240 に答える