【问题标题】:Ajax callback onstart works even if input is invalid即使输入无效,Ajax 回调 onstart 也有效
【发布时间】:2012-01-21 13:29:15
【问题描述】:

我在<h:form> 中有输入字段和命令按钮。输入字段是必需的,如果输入无效的内容,验证错误消息会很好地显示。在表单的末尾,我有以下按钮:

<p:commandButton value="" ajax="true" update="foormm"
    icon="ui-icon-check" actionListener="#{bean.sayHello}"
    onstart="dialog.show()"
    oncomplete="handleAjaxResponse(xhr, status, args)">
</p:commandButton>

问题是,无论验证如何,对话框都会显示。我认为 Ajax 请求是在验证输入的情况下提出的。这里有什么问题?为什么必填字段为空,onstart 也会被触发?

我在 Eclipse 中使用 JSF 2.0、Primefaces 3.0 和 Weblogic 12.1。

任何帮助表示赞赏。

【问题讨论】:

  • 对话框应该说“等待,正在处理请求”。所以在成功时显示它是没有意义的,因为用户已经等待了。

标签: java ajax jsf jakarta-ee primefaces


【解决方案1】:

换句话说,您只想在回发后没有发生验证错误时才显示对话框? onstart 根本没有考虑到这一点。它是在调用 ajax 回发之前调用的。

您需要以不同的方式处理它。 &lt;p:dialog&gt; 有一个 visible 属性,它可以将 EL 表达式计算为 boolean 结果。你可以利用它:

<p:dialog id="dialog" visible="#{some condition}">

#{some condition} 可以是FacesContext#isPostback()FacesContext#isValidationFalied() 的最简单组合。所以,如果是回发并且验证没有失败,那么对话框应该是可见的。

<p:dialog id="dialog" visible="#{facesContext.postback and not facesContext.validationFailed}">

您只需要让您的按钮也更新该对话框:

<p:commandButton value="" ajax="true" update="foormm dialog"
    icon="ui-icon-check" actionListener="#{bean.sayHello}"
    oncomplete="handleAjaxResponse(xhr, status, args)">
</p:commandButton>

或者,您也可以让对话框的visible 条件依赖于您在 action(listener?) 方法中设置的某些 bean 属性:

<p:dialog id="dialog" visible="#{bean.saidHello}">

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多