いくつかの p:menuitems を含む ap:menuButton があります。これらの各項目は、セッション スコープのバッキング Bean で特定のパラメーターを使用してメソッドを呼び出し、そのバッキング Bean に依存するモーダル ダイアログを開く必要があります。私の p:menuitem は次のようになります。
<p:menuitem value="..." oncomplete="dialog.show()" update=":dialog" actionListener="#{myController.createNewItem}">
</p:menuitem>
myController.createNewItem に渡されるパラメーターは、クリックされたメニュー項目に依存する唯一のものであり、3 つの方法で渡そうとしました。
1)<f:setPropertyActionListener target="#{myController.newItem.property}" value="..." />
モーダル ダイアログが f:setPropertyActionListener をブロックしているように見えるため、これは機能しません。myController.newItem.property のセッターは、ダイアログを閉じた後にのみ呼び出されますが、これでは十分ではありません。ダイアログがモーダルでない場合は機能しますが、モーダルにする必要があります。
2) <f:attribute name="param" value="..." />
event.getComponent().getAttributes() は、1 つの要素を持つマップを返します。これは、some_namespace.MARK_ID => 何らかの数値のように見えますが、これは明らかに渡したいパラメーターではありません。
3)<f:param name="param" value="..." />
これは actionListener ではなく action でのみ機能することを読みましたが、とにかく試してみました。FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap() には、フォームのすべてのフィールドといくつかの追加パラメーターが含まれていますが、渡したいものではないため、機能しないと思います。
ここでやろうとしていることを行う方法はありますか、それとも f:setPropertyActionListener と非モーダル ダイアログの使用にこだわっていますか? ありがとう。