我有一个问题。我有一个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家庭教程,但没有成功。
Thanks in advance
我在一个没有stackoverflow的朋友的帮助下找到了一个解决方案。看来我用错了,需要添加一个callbackparam。
我需要添加Bean:
RequestContext.getCurrentInstance().addCallbackParam(
"doneChangeParam",
doneChange
);
和oncomplete更改为:
oncomplete="if(
args && args.doneChangeParam)
{
actionSuccessDialogVar.show(); changePWDialog.hide();
}"