Web UI プロジェクトに PrimeFaces UI ライブラリを使用しています。
ボタンのあるmanage_watchfolder.xhtml
ページがあり、このボタンでダイアログが起動します。
<p:commandButton value="Add" oncomplete="dlgEditWF.show()" update=":editWFForm">
<f:param value="#{item.value.ID}" name="editId"/>
<h:graphicImage value="./edit.png" />
</p:commandLink>
dlgEditWF
から含めたこの同じファイル内にedit_watchfolder.xhtml
:
<p:dialog id="editDialog" widgetVar="dlgEditWF" dynamic="true">
<ui:include src="edit/edit_watchfolder.xhtml"/>
</p:dialog>
ボタンがクリックされる前に読み込まれdynamic=="true"
ないようにするために使用しています。edit_watchfolder.xhtml
editWFForm
のフォームですedit_watchfolder.xhtml
。
問題は、ダイアログを初めて起動したときに、edit_watchfolder.xhtml
バッキング Bean (スコープ指定されたリクエスト) が 2 回作成されることです。最初はeditId
(上記のコードを参照) で渡された値は問題ありませんが、2 回目はそこにないため、バッキング Bean は間違った値を取得します。
親ページ(OK
またはCancel
ボタン) に戻ってダイアログを再度起動すると、問題はなくなり、すべて問題ありません。問題は最初の起動のみのようです。
最初のダイアログが起動されたときにバッキング Bean が 2 回作成されるのはなぜですか?