使用jsf primefaces按钮根据oncomplete事件的布尔值关闭对话框

时间:2013-02-27 12:41:24

标签: jsf primefaces dialog

我有问题。我有一个JSF Primefaces环境,我想设置密码。在bean中有一个方法,它可以抛出异常或将doneChange布尔值设置为true。

我希望以下运行:
如果doneChange布尔值为true,则只需关闭按钮所在的对话框,然后打开另一个按钮 这是按钮的代码:

                <p:commandButton id="changeButtonId" 
                             type="submit" 
                             value="#{msg.changePassword}" 
                             ajax="true" 
                             action="#{changePasswordController.changePassword}" 
                             update=":changePasswordFormId :actionSuccessDialogId" 
                             oncomplete="if(#{changePasswordController.doneChange}){actionSuccessDialogVar.show()}; if(#{changePasswordController.doneChange}){changePWDialog.hide();}">
                                <f:setPropertyActionListener target="#{functionSuccessBean.actionName}" value="#{msg.changePassword}"/>
                                <f:setPropertyActionListener target="#{functionSuccessBean.description}" value="#{msg['actionSuccess']}"/>
            </p:commandButton>

问题是:我在单击此按钮时调试,在oncomplete之前调用doneChange设置为true。我只有一个疑问:当渲染按钮时,确定了oncomplete事件。因为当我再次打开这个对话框时,那个doneChange仍然是真的并按我的意愿工作。我没有想法如何让它发挥作用 如何让它实时响应doneChange布尔值?它是否适用于某些绑定?我尝试过primefaces home教程,但没有成功。

提前致谢

1 个答案:

答案 0 :(得分:3)

我在非stackoverflow朋友的帮助下找到了解决方案。看来我用错了方法,需要添加一个callbackparam。

我需要添加Bean:

RequestContext.getCurrentInstance().addCallbackParam(
  "doneChangeParam", 
  doneChange
);

并且oncomplete变为:

oncomplete="if(
  args &amp;&amp; args.doneChangeParam)
  {
    actionSuccessDialogVar.show(); changePWDialog.hide();
  }"