关闭对话框不起作用

时间:2014-05-09 09:02:14

标签: ajax primefaces

我正在使用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和第二个按钮可以吗?

1 个答案:

答案 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