如何更新我在 PrimeFaces commandButton 组件的 oncomplete 事件上使用的 javascript 代码

How do I update my javascript code that I used on oncomplete event of PrimeFaces commandButton component

我正在使用 Primefaces 开发我的网站。
我使用 commandButton 组件。当我点击这个按钮时,我调用我的 bean 方法来更新两个布尔值。根据这两个变量,我会显示不同的对话框。

这是我的代码:

    <p:commandButton action="myBean.method" oncomplete="
    if (#{myBean.var1}) {  
        PF('dialog1').show() 
    } else { 
        if (#{myBean.var2}) { 
            PF('dialog2').show() 
        } else { 
            PF('dialog3').show() 
        }
   }" />

有了这个,oncomplete 事件总是得到我的 bean 变量的初始值,而不是更新的变量:(
而且我不知道这是否是最好的方法 ;)

为什么不直接使用 Primefaces 的 RequestContext 实用程序?有了它就可以把是否打开哪个dialog的逻辑放上去

public void method(){
  RequestContext requestContext = RequestContext.getCurrentInstance();
  if (var1) {  
     requestContext.update("PF('dialog1').show()");
  } else { 
  if (var2) { 
     requestContext.update("PF('dialog2').show()");
  } else { 
     requestContext.update("PF('dialog3').show()");
  }
}

或者如果你真的想在 javascript 中使用你的逻辑,你也可以使用 addCallbackParam()

回调参数(引自 Primefaces 用户指南 6.0)

在某些情况下,您可能需要 ajax 回调中的支持 bean 的值。打回来 参数被序列化为 JSON 并在 ajax 回调中作为参数提供。

HTML:

<p:commandButton actionListener="#{bean.validate}"
oncomplete="handleComplete(xhr, status, args)" />

豆类:

public void validate() {
//isValid = calculate isValid
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.addCallbackParam("isValid", true or false);
}

isValid 参数将在 handleComplete 回调中可用;

<script type="text/javascript">
function handleComplete(xhr, status, args) {
var isValid = args.isValid;
}
</script>