1

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

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

                <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 家庭教程,但没有成功。

提前致谢

4

1 回答 1

3

I found a solution by a help of a non-stackoverflow friend. It appears I used it wrong way, and needed to add a callbackparam.

I needed to add in the Bean:

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

And oncomplete changed to:

oncomplete="if(
  args &amp;&amp; args.doneChangeParam)
  {
    actionSuccessDialogVar.show(); changePWDialog.hide();
  }" 
于 2013-02-27T13:08:17.010 回答