我有 ap:menuButton,其中包含几个 p:menuitems。这些项目中的每一个都必须在会话范围的支持 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() 返回一个带有单个元素的地图,它看起来像 some_namespace.MARK_ID => 某个数字,这显然不是我想要传递的参数。
3)<f:param name="param" value="..." />
我读到这个只适用于动作,而不是动作监听器,但无论如何都试过了。FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap() 包含我表单上的所有字段以及一些额外的参数,但不是我想要传递的参数,所以我猜它不起作用。
有什么方法可以做我在这里尝试做的事情,还是我坚持使用 f:setPropertyActionListener 和非模态对话框?谢谢。