我正在使用primefaces 5.0,我有这种情况:
<composite:implementation>
<p:dialog id="confirmDialog#{cc.attrs.someParam}"
rendered="#{cc.attrs.nextState.warnRequired}" severity="alert" resizable="false" modal="#{cc.attrs.modal}"
widgetVar="confirmation#{cc.attrs.someParam}">
<p:commandButton value="#{msg[cc.attrs.nextState.buttonKey]}" icon="#{nextStatus.icon}"
action="#{someActionCalled}"
update="#{cc.attrs.update}" process="#{cc.attrs.process}"
oncomplete="if (!args.validationFailed) { PF('confirmation#{cc.attrs.someParam}').hide(); }">
</p:commandButton>
<p:commandButton id="decline" value="#{msg['action.cancel']}" icon="ui-icon ui-icon-cancel"
onclick="PF('confirmation#{cc.attrs.someParam}').hide()" />
</p:dialog>
</composite:implementation>
当我点击“拒绝”/取消按钮时,确认对话框已关闭/隐藏。没关系。 显然确认#{cc.attrs.someParam}可以找到widgetVar并关闭此对话框 但是,当我点击第一个按钮确认并在后面的bean中采取一些操作时,我得到:
Widget for var 'confirmationSomeParam' not available!
primef...mefaces (line 1)
detailed error: TypeError: PF(...) is null
{cc.attrs.someParam}
传递给组件。它的评估清洁和价值观(很明显,因为第二个按钮可以关闭对话框
所以很奇怪,第一个按钮无法找到这个对话框widgetVar和第二个按钮可以吗?
答案 0 :(得分:0)
所以我有时间再次检查我的应用程序的这个关键部分并在此发布,以便将来有人可能会发现这个有用:)
我在代码中的两个按钮下添加了p:remoteCommand:
<p:remoteCommand name="somethingToDo" update="#{cc.attrs.update}" />
并在第一个按钮中删除了更新参数。
为什么?因为错误说,它找不到一些dialogId(在这个例子中'confirmation332m'),并且由于更新整个表单的更新参数,对话框被删除/更新。
所以我将更新参数从按钮移动到远程命令和
onComplete
我只需在检查完所有验证后调用somethingToDo();
。
也许它不是最好的解决方案,但现在它有效;)
PF论坛链接(针对未来的问题):http://forum.primefaces.org/viewtopic.php?f=3&t=37851