3

ui:repeat varStatus="v"最近、を使用してインデックス値を設定したい場合に遭遇しました<h:inputHidden="#{v.index}/>。これとexecuteAJAX を使用するコンポーネントを試すと、プロパティが書き込み可能ではないという例外が発生します。周りを見回していると、それがエラーを解消inputHiddenする属性をサポートしていることがわかりました。readonly="true"

これがドキュメントにない理由はありますか?(つまり、特殊、パススルー、その他) 安全に使用できますか?

4

2 に答える 2

4

Core JavaServer Faces 3eを掘り下げた後、次のように述べています。

h:inputHidden タグには、標準の HTML および DHTML タグをサポートしないことを除いて、他の input タグと同じ属性があります。

したがって、readonlyドキュメントに記載inputHiddenされていない理由と、HTML でレンダリングされていない理由inputHiddenは、それをサポートしていないためです。これは、 '(エラーメッセージのある赤い波線)にreadonly属性として追加しようとしたときに、Netbeans によっても確認されました。に配置された Bean プロパティに対して定義されてinputHiddenいないフォームを送信したときに、その例外を取得できました。フォームが送信されたときに (私の場合) を呼び出し、コードで何も定義されていないため、もちろんその例外がスローされます。setterinputHiddeninputHiddensetter

javax.el.PropertyNotWritableException: /index.xhtml @14,56 value="#{bean.x}": The class 'Bean' does not have a writable property 'x'. 

あなたがそれを行うときになぜそれが機能するのかについては、私にはわかりません。安全性が心配なので、BalusC が言うように、単純にそのプロパティを使用<input type="hidden">または定義することをお勧めsetterします。そのように使用しないでください。

于 2013-07-13T01:57:12.007 に答える