当我尝试在 oncomplete
属性中进行测试时,我在显示对话框时遇到问题。
但是当我刷新页面时它工作正常,我必须刷新支持 bean 中变量的每次更改。
即使我在没有测试的情况下显示对话框,它也能正常工作。
问题出在 Debug模式下。当我在调用操作后进行测试时,JSF 不调用 get
。
<p:commandButton value="#{msg.LABEL_ADD}"
action="#{axeBean.calculer}"
style="width:100px;"
update="msgs"
oncomplete="if(#{axeBean.formvalide}) PF('dialog').show()" />
formvalide
是一个 bool 值
。
我该如何解决这个问题?
最佳答案
我仍然相信问题的核心应该通过应用我标记为重复的问题的答案来解决。由于您遇到了几个问题,我会在这里给您一些建议。
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
获取它。
另见:
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 && !args.validationFailed) PF('dialog').show()"
另见:
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");
另见:
我不确定您在做什么检查...您可能最好创建一个自定义验证器。见:
关于jsf - 显示 p :dialog using oncomplete only if custom validation in action was passed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43804326/