【问题标题】:Omnifaces - FullAjaxExceptionHandler - f:ajax onevent status is successOmnifaces - FullAjaxExceptionHandler - f:ajax onevent 状态为成功
【发布时间】:2012-07-03 19:38:15
【问题描述】:

我正在使用 Omnifaces FullAjaxExceptionHandler - 它工作得很好,但是当我进行 ajax 调用并有一个 onevent 函数检查状态 == 'success' 它仍然被调用,即使 FullAjaxExceptionHandler 已经呈现错误页面。 (我在 glassfish 3.1.1 上使用 JSF(Mojarra 2.1.3)

JSF 代码:

<h:commandButton value="myButton"> <f:ajax listener="#{myBean.myBeanFunction()}" render="someDiv" onevent="myFunction"/> </h:commandButton>

Javascript 代码:

function myFunction(e) { if (e.status == 'success') { alert("Success"); } }

因此,如果 FullAjaxExceptionHandler 将我带到错误页面,我需要一些不执行 javascript 函数的方法。

【问题讨论】:

  • 在设计上不可能更改 ajax 响应状态,错误状态会导致响应数据被忽略(因此最终用户不会得到任何反馈)。您需要挂钩“成功”状态的功能需求到底是什么?它究竟是如何以这种方式失败的?或许可以用不同的方式解决。
  • 我需要在ajax调用成功完成时显示一个对话框,但是当调用过程中出现错误时,它会呈现错误页面,但仍然会尝试显示对话框。对话框实际上并没有显示,但对话框是模态的,因此错误页面以模态背景结束,您无法单击页面上的任何内容。如果 FullAjaxExceptionHandler 呈现错误页面,有什么方法可以不执行 onevent javascript?或者有没有办法在 onevent javascript 函数中放置一些可以检查的数据,这样我就不会尝试显示对话框?
  • 我刚刚发现,如果您使用 primefaces p:commandButton,或者如果您使用 p:ajax,它可以正常工作。不知道为什么使用 f:ajax 时它的工作方式不同。

标签: jsf-2 omnifaces


【解决方案1】:

如果返回的 XML 响应没有表明 render="@all" 已被执行(这表明整个文档将被替换),您可以检查如下:

if (e.responseXML.getElementById('javax.faces.ViewRoot') == null) {
    // ...
}

它与 PrimeFaces 命令组件的oncomplete 一起使用是因为它不为此使用标准的 JSF ajax API,因此以不同的方式做事 - 更直观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2013-12-07
    • 2012-03-06
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多