我有问题。我有一个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教程,但没有成功。
提前致谢
答案 0 :(得分:3)
我在非stackoverflow朋友的帮助下找到了解决方案。看来我用错了方法,需要添加一个callbackparam。
我需要添加Bean:
RequestContext.getCurrentInstance().addCallbackParam(
"doneChangeParam",
doneChange
);
并且oncomplete变为:
oncomplete="if(
args && args.doneChangeParam)
{
actionSuccessDialogVar.show(); changePWDialog.hide();
}"