仅当自定义操作验证通过时才使用 oncomplete 显示 p:dialog

Show p:dialog using oncomplete only if custom validation in action was passed

当我尝试在 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.

我该如何解决这个问题?

我仍然认为问题的核心应该通过应用我标记为重复的问题的答案来解决。由于您 运行 有几个问题,我会在这里给您一些建议。

PrimeFaces oncomplete doesn't refresh the variable on test ... But when I refresh the page it worked fine.

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

获取它

另请参阅:

  • How to update a h:inputHidden with p:commandButton?

I have a problem showing a dialog when I try to do a test in the oncomplete attribute.

你不需要暴露你自己的validationFailed。 PrimeFaces 会在 oncomplete 函数中给你一个 args 对象,如果验证失败,它包含一个 validationFailed 属性。所以只需使用:

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

另请参阅:

  • How to display dialog only on complete of a successful form submit

validationFailed worked just with required and client side validation, but I want to validate something in backing...

只需在您的操作中执行您需要执行的检查即可。如果您的自定义验证失败,您可以在 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");

另请参阅:

  • Creating FacesMessage in action method outside JSF conversion/validation mechanism?

我不确定您在做什么检查...您可能最好创建一个自定义验证器。参见:

  • How to perform validation in JSF, how to create a custom validator in JSF