0

我为 Vaadin 流程中的 UI 编写了自己的自定义错误处理程序。但是当我抛出异常时,我的视图崩溃并且不显示我的人类可读的错误消息。

我在使用 Vaadin 8 的其他应用程序中做到了这一点,并且运行良好。这个想法在我的后端服务中引发了 SgiException,例如:

  • 未找到产品
  • 字段“XXX”的值不正确
  • 该产品无库存。
  • 等等

然后显示系统通知

        public static void setDefaultErrorHandler(ErrorEvent errorEvent) {

            Throwable t = DefaultErrorHandler.findRelevantThrowable(errorEvent.getThrowable());

            String message;
            if (t != null) {
                message = t.getMessage();
            } else {
                message = "";
            }

            log.error(message, t);

            SgiException sgiException = getCauseOfType(t, SgiException.class);
            if (sgiException != null) {
                NotificationBuilder.exception(sgiException.getCode(), sgiException.getMessage());
                return;
            } else {
                NotificationBuilder.exception(UNKNOW_ERROR, (message == null ? "" : message));
                return;
            }
        }

        private static <T extends Throwable> T getCauseOfType(Throwable th, Class<T> type) {
            while (th != null) {
                if (type.isAssignableFrom(th.getClass())) {
                    return (T) th;
                } else {
                    th = th.getCause();
                }
            }
            return null;
        }

这就是我设置自定义错误处理程序的方式:

        @PostConstruct
        public void configBaseView() {
            VaadinSession.getCurrent().setErrorHandler(Util::setDefaultErrorHandler);
        }

在视图中显示:

在此处输入图像描述

注意: 调试应用程序,查看它正在运行的代码,查看它调用的方法,由于某种原因没有显示通知。

4

1 回答 1

2

这是目前在 Vaadin 10 中无法覆盖的令人讨厌的行为。关注并投票(赞许或评论)此问题以解决它:https ://github.com/vaadin/flow/issues/801

于 2018-08-28T08:04:12.680 回答