Vaadin:集中自定义异常处理

时间:2012-09-19 15:38:01

标签: java vaadin

我使用Vaadin框架来创建我的Web应用程序GUI。

我有一个Vaadin按钮,其点击侦听器代码可能会引发应用程序自定义异常。在应用程序代码的其他方面,这个异常会一直抛到我的自定义窗口类,它集中处理。我想在这里做类似的事情:在clickListener代码中抛出此异常,因此我可以在窗口类的自定义终端错误处理程序中捕获它。由于click侦听器类没有抛出任何异常,我无法在那里抛出异常,我想我将不得不在本地处理异常。由于我不想在按钮单击侦听器级别处理异常,我想我会将它转发到我的自定义窗口类。像这样:

Button btnNew = new Button("New", new Button.ClickListener() {
  public void buttonClick(ClickEvent event) {
    try {
        doThingThatThrowsException();
    } catch (Exception exc) {
        window.handleCustomException()
    }
  }
});

这是使用Vaadin集中处理自定义异常的常用方法吗?

1 个答案:

答案 0 :(得分:1)

我无法回答是否是处理异常的通常的方式,但我们做了非常类似的事情。

根据听众的数量或频率,您还可以创建为您执行该委派的抽象侦听器。

e.g。

abstract class BasicListener {
  protected void handleThrowable(Component.Event event, Throwable throwable) {
    Window window = event.getComponent().getWindow();
    if (window instanceof ExceptionHandlingWindow) {
      ((ExceptionHandlingWindow) window).handleException(throwable);
    } else {
      // Log it ? DO something, anyway.
    }
  }
}

abstract class ExceptionHandlingButtonClickHandler extends BasicListener implements Button.ClickListener {
  @Override
  public void buttonClick(Button.ClickEvent event) {
    try {
      handleClick(event);
    } catch (Throwable e) {
      handleThrowable(event, e);
    }
  }

  protected abstract void handleClick(Button.ClickEvent event);
}

Button btnNew = new Button("New", new ExceptionHandlingButtonClickHandler() {
  @Override
  protected void handleClick(Button.ClickEvent event) {
    doThingThatThrowsException();
  }
});