为什么setDefaultErrorHandler使我的视图在vaadin流中崩溃?

时间:2018-08-27 19:50:16

标签: vaadin vaadin-flow

我在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);
        }

在视图中显示以下内容:

enter image description here

  

注意:   调试该应用程序,查看其运行的代码,查看由于某种原因其调用的方法未显示通知。

1 个答案:

答案 0 :(得分:2)

这是一个令人讨厌的行为,目前在Vaadin 10中无法覆盖。请对此问题进行投票(竖起大拇指或发表评论)以解决此问题:https://github.com/vaadin/flow/issues/801