Jsf 处理f:ajax OneEvent函数中侦听器方法引发的异常

Jsf 处理f:ajax OneEvent函数中侦听器方法引发的异常,jsf,exception-handling,Jsf,Exception Handling,我试图处理这样一种情况:从通过ajax侦听器执行的backingbean方法中抛出异常(在示例中是故意的),我希望通过显示一个声明请求发生错误的消息来处理该异常。我的想法是,当捕捉到异常时,我可以在bean中设置一个布尔值,然后我可以将该布尔值传递到onevent函数中,以确定要显示的toast消息的类型 问题在于,在运行OneEvent函数时,传入的布尔值直到ajax至少运行了两次才被更新(第一次调用的值为false,第二次调用的值为true)。它的行为就像OneEvent方法运行它的循环(对

我试图处理这样一种情况:从通过ajax侦听器执行的backingbean方法中抛出异常(在示例中是故意的),我希望通过显示一个声明请求发生错误的消息来处理该异常。我的想法是,当捕捉到异常时,我可以在bean中设置一个布尔值,然后我可以将该布尔值传递到onevent函数中,以确定要显示的toast消息的类型

问题在于,在运行OneEvent函数时,传入的布尔值直到ajax至少运行了两次才被更新(第一次调用的值为false,第二次调用的值为true)。它的行为就像OneEvent方法运行它的循环(对于3个阶段),然后更新支持bean布尔值。有没有一种方法可以做到这一点,或者我根本无法做到这一点。我知道,但我希望使用通过提供的toast消息以更优雅的方式处理异常。我如何获得它,以便当listenerMethod抛出异常时,我可以运行一组不同的javascript来显示正确的信息

背豆 XHTML
@Named
@ViewScoped
@Data
public class ExampleBean implements Serializable {
  private static final long serialVersionUID = 1L;

  private Boolean ajaxError;

  public void initialize() {
    log.debug("Initialized Bean");
    ajaxError = false;
  }

  public void listenerMethod() {
    ajaxError = false;
    try {
      // method logic... throw intentional exception for now
      throw new Exception();
    } catch (Exception e) {
      ajaxError = true;
    }
  }
<h:commandLink id="ajax-link">
  <h:outputText value="Ajax Link" />
  <f:ajax listener="#{exampleBean.listenerMethod()}"
    render="Ids..."
    onevent="function(data) { ajaxEvent(data, '#{exampleBean.ajaxError}') }" />
</h:commandLink>
function ajaxEvent = function(data, ajaxError) {
    var status = data.status;
    var title = 'Title';
    var message = 'Description message';

    console.log("AjaxError: " + ajaxError);
    switch (status) {
    case 'begin':
        // logic...
        break;
    case 'complete':
        // other logic...
        break;
    case 'success':
        if (ajaxError === 'true') {
            title = 'Error';
            message = 'An error occurred. Please try again later.';
            toastr['error'](message, title);
        } else {
            title = 'Success';
            message = 'Successful. No Exceptions Thrown.';
            toastr['success'](message, title);
        }
        break;
    }
}