我有一个p:menuitem需要(1)点击后更新支持bean属性,然后(2)显示一个p:对话框。
这是我的设置:
<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>
支持bean:
public R getRecord() {
if (currentAction == null) {
return null;
}
return currentAction == NEW ? newRecord : selectedRecord;
}
问题是actionListeners和actions只在第5阶段执行,我需要在此之前设置bean.currentAction,以便可以正确地更新和呈现对话框。
**关于我想要实现的目标的一些背景:对话框表单用于创建新记录以及更新现有记录(添加和编辑对话框)。那么&#34; currentAction&#34;在bean上指示用户正在执行的操作。根据哪个动作,表单需要使用不同的模型对象(&#34; newRecord&#34;或&#34; selectedRecord&#34;)来拉取表单数据并将其保存到。
答案 0 :(得分:0)
虽然不是一个非常优雅的解决方案,但您可以使用PrimeFaces的RequestContext更新方法设置更新目标,并在设置所需属性后使用execute方法在actionListener中显示对话框。
答案 1 :(得分:0)
如果您要求在对话框打开之前调用backing bean方法,那么您可以使用ajax函数(我不知道您是否可以在应用程序中使用ajax)。对于p:menuItem,有一个名为 onclick 的函数,您可以在其中调用 a4j:ajax 函数,通过该函数可以调用辅助bean方法并在对话框打开之前更新模型。
答案 2 :(得分:0)
默认情况下,在“调用应用程序”阶段调用操作。您可以在immediate="true"
代码中添加p:menuitem
属性。这将在“应用请求值”阶段调用操作。