現在、JSF 1.2 から JSF 2.0 に移行しようとしていますが、直面した問題の 1 つは、フォームを含むページの一部を再レンダリングできないことです。このように(再レンダリングouterDiv
またはフォーム自体):
<h:panelGroup id="outerDiv">
<h:form id="form1">...</h:form>
<h:form id="form2">...</h:form>
</h:panelGroup>
つまり、outerDiv
すべてを更新してもフォーム (またはフォーム) 自体が壊れて奇妙な動作をする場合、少なくとも ajax 呼び出しが最初にトリガーされたときに機能しないか、Bean のメソッドを呼び出す代わりに、その Bean の新しいインスタンスを作成します。何もしません(すべての呼び出しで以前のものを破棄するか、最初の呼び出しで新しいものを作成してから何もしません)。この問題は、次のようにフォーム内のコンポーネントのみを再レンダリングすることで解決できます (updateinnerDiv1
およびinnerDiv2
):
<h:panelGroup id="outerDiv">
<h:form id="form1">
<h:panelGroup id="innerDiv1">...</h:panelGroup>
</h:form>
<h:form id="form2">
<h:panelGroup id="innerDiv2">...</h:panelGroup>
</h:form>
</h:panelGroup>
しかし、いくつかのページを含む場所がたくさんあり、ui:include
そのページの中を見て特定のコンポーネントを更新するのはあまり便利ではありません。さらに、これらのページの多くはフォーム内に共通のラッパー div を持たず、各コンポーネントを個別に更新することは非常に面倒でエラーが発生しやすいため、これらすべてのページを変更する必要があります。
では、JSF 1.2 のように、JSF 2.0 でページの一部を 1 番目のアプローチで正しく更新することは可能ですか?
編集:フォームレンダリングの問題は、私が使用するリッチフェイス4.2の問題a4j:ajax
(その後継者はa4j:support
リッチフェイス3.3.3で使用されたもの)とに基づくカスタムボタンのようですrich:commandButton
。それらをネイティブjsfのf:ajax
フォームに置き換えると、正しく更新されるようです。しかし、外側のdivの問題はまだ実際にあります