【问题标题】:Unable to catch ajax error on JSF 2 App无法在 JSF 2 应用程序上捕获 ajax 错误
【发布时间】:2012-05-29 17:25:05
【问题描述】:

我碰巧不明白为什么如果发生异常我无法在 p:ajaxStatus 上收到警报

我基本上在 facelet 页面中有这段代码

<p:ajaxStatus onerror="alert('Error occurred!')" />

<p:commandLink  title="Delete" process="@this" 
    actionListener="#{myBean.deleteData}">
    <h:outputText value="Delete" />                 
</p:commandLink>

在我的 bean 上,我提出了一个异常来测试 ajax 状态

public void deleteData(ActionEvent event) {
    throw new CustomException("Testing");
}

我不确定,但 ajax 请求不会触发警报。

我检查了 firebug 并看到了这个 ajax 响应。

<?xml version='1.0' encoding='UTF-8'?>
<partial-response><changes><update id="javax.faces.ViewState"><![CDATA[5240489117331224423:7642972336085906948]]></update></changes></partial-response>

但是当我检查服务器日志时,我看到了这个注册

javax.faces.event.AbortProcessingException: /pages/members.xhtml @208,128 actionListener="#{myBean.deleteData}": com.test.CustomException: Testing

为什么会这样?

Primefaces 3.2/Glassfish/JSF 2.0

【问题讨论】:

标签: ajax jsf-2 primefaces


【解决方案1】:

来自p:ajaxStatus 的 Primefaces 3.2 文档:

onerror: Client side callback to execute when an ajax request fails.

在 Firebug 中,您会收到常规的 ajax 响应。所以请求没有失败。据我了解,失败意味着没有响应或响应无效。您看到的是预期的行为。

更新:正如 perissf 所评论的,通常的方法是在您的操作方法中生成一个 FacesMessage 并使用您的 ajax 请求更新一个 h:messages 标记。

【讨论】:

  • 啊,好吧。那么你如何处理这种情况呢?没有什么我可以用它做的吗?
  • 我认为要走的路是使用 javax.faces.Message。您可以发送具有各种严重性级别/样式的消息,包括错误级别
  • 谢谢马特。我只是一个想法,因为我一般是 JSF 的初学者。我在 web.xml 中配置了一个错误页面。我实际上在想我会被转发到那个页面。 ajax请求不是这样吗?
  • 另外,什么通常的异常或错误会触发客户端的 onerror 处理程序被调用或 ajax 状态被更新?我正在考虑会触发 ajax 请求导致 onerror 情况的场景。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2015-03-18
  • 2017-05-01
  • 1970-01-01
  • 2012-04-04
  • 2011-02-28
相关资源
最近更新 更多