仅在传递了自定义验证时才使用oncomplete显示p:对话框

时间:2017-05-05 11:55:28

标签: jsf primefaces jsf-2

当我尝试在oncomplete属性中进行测试时,显示对话框时出现问题 但是当我刷新页面时,它运行正常,我必须刷新支持bean中变量的每次更改。 即使我在没有测试的情况下显示对话框也可以。 问题出在调试模式。在调用操作后测试时,JSF不会调用get

<p:commandButton value="#{msg.LABEL_ADD}"
                 action="#{axeBean.calculer}"
                 style="width:100px;"
                 update="msgs"
                 oncomplete="if(#{axeBean.formvalide})  PF('dialog').show()" />

formvalideboolean

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

我仍然相信问题的核心应该通过在我标记为重复的问题上应用答案来解决。当你遇到几个问题时,我会在这里给你一些指示。

  

PrimeFaces oncomplete不会在测试时刷新变量...但是当我刷新页面时它工作正常。

您可以在点击它之前显示您的按钮。因此,oncomplete属性也被渲染。它不是动态的。因此,在调用动作时不会重新评估它 如果您需要在某些JavaScript调用中访问#{axeBean.formvalide},请将其用作隐藏输入的值,并在调用操作后更新输入。现在,您可以使用document.getElementById('hiddenInputsClientId').value

来获取它

另见:

  

当我尝试在oncomplete属性中进行测试时,显示对话框时出现问题。

您无需公开自己的validationFailed。 PrimeFaces将在args函数中为您提供oncomplete对象,如果验证失败,则该对象包含validationFailed属性。所以只需使用:

oncomplete="if (args &amp;&amp; !args.validationFailed) PF('dialog').show()"

另见:

  

validationFailed只使用必需和客户端验证,但我想在支持中验证某些内容......

只需执行您在行动中需要执行的检查。如果您的自定义验证失败,您可以在Faces上下文中设置一个标志:

FacesContext.getCurrentInstance().validationFailed();

如果您需要设置错误消息,请使用:

FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "message", null);
FacesContext.getCurrentInstance().addMessage("clientId", message);

在这里,您可以使用null作为clientId来设置全局消息。

如果您使用的是OmniFaces,则可以使用:

Faces.validationFailed();
Messages.addError("clientId", "message");

另见:

我不确定您正在做什么检查......可能是您通过创建自定义验证器更好。参见: