10

@ViewScope ManagedBean と @PostConstruct 初期化メソッドがあります。このメソッドは、新しいインスタンスが作成されたときに呼び出されますが、すべての ajax 呼び出しでも呼び出されます。これはなぜですか?

AJAX 呼び出しでは、init-Method が呼び出されて実行されますが、変更は表示されません。たとえば、init-Method のプロパティを変更すると、これは開始時にのみ表示され、AJAX 呼び出しでは表示されません。AJAX 呼び出しの場合、値の変更は @ViewScoped Bean では永続的ではありません。

なぜそうなのか誰にもわかりますか?どうすればこれを変更できますか?

4

1 に答える 1

11

これは正常な動作ではありません。bindingこれは、部分的な状態の保存がオンになっているときに、タグ ハンドラー属性または JSF コンポーネントの属性をビュー スコープ Bean のプロパティにバインドすると発生します。これはイシュー 1492として知られており、(今後の) Mojarra 2.2 で修正されています。

一般に、属性がないことでタグ ハンドラーを認識できrenderedます。たとえば、、、<c:if>など<f:validator><ui:include>次のように、そのようなタグ ハンドラーの属性をビュー スコープ Bean のプロパティにバインドするとします。

<c:if test="#{viewScopedBean.something}"></c:if>
<h:inputText><f:validator binding="#{viewScopedBean.validate}" /></h:inputText>
<ui:include src="#{viewScopedBean.includePage}" />

ビューが部分的に保存された状態から復元されるたびに、ビュー スコープ Bean が再作成されます。これは、ビュー スコープに関する鶏卵の問題です。適切なビュー スコープの Bean を取得するには、復元されたビューから抽出する必要があるためです。

bindingこれは、JSF コンポーネントの属性でビュー スコープ Bean のプロパティを参照する場合にも発生します。

<h:someComponent binding="#{viewScopedBean.someComponent}" />

以下も参照してください。

于 2012-01-10T14:09:55.843 に答える