(1) クリック時にバッキング Bean プロパティを更新し、(2) ap:dialog を表示する必要がある ap:menuitem があります。
これは私が持っているセットアップです:
<p:menuitem value="Show Dialog"
oncomplete="dialog_widget.show();"
update=":dialog"
actionListener="#{bean.setCurrentAction}">
</p:menuitem>
<p:dialog widgetVar="dialog_widget" id="dialog" dynamic="true">
<h:form>
<p:inputText value="#{bean.record.text} />
// the proper rendering of this dialog form depends on bean.currentAction
// being set during JSF Phase 4 Update Model Values
</p:dialog>
そしてバッキングビーン:
public R getRecord() {
if (currentAction == null) {
return null;
}
return currentAction == NEW ? newRecord : selectedRecord;
}
問題は、actionListeners とアクションがフェーズ 5 の間にのみ実行され、その前に bean.currentAction を設定して、ダイアログを適切に更新およびレンダリングできるようにする必要があることです。
** 私が達成しようとしていることの背景: ダイアログ フォームは、新しいレコードの作成と既存のレコードの更新 (ダイアログの追加と編集) に使用されます。したがって、Bean の「currentAction」は、ユーザーが実行しているアクションを示します。どのアクションに応じて、フォームは異なるモデル オブジェクト (「newRecord」または「selectedRecord」) を使用して、フォーム データをプルして保存する必要があります。