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

为什么setDefaultErrorHandler在vaadin流中使我的视图崩溃?,vaadin,vaadin-flow,Vaadin,Vaadin Flow,我在Vaadin流中为UI编写了自己的自定义错误处理程序。但是当我抛出异常时,我的视图会崩溃,并且不会显示人类可读的错误消息 我在使用Vaadin 8的其他应用程序中实现了这一点,效果非常好。这个想法在我的后端服务中引发了一个SGIEException,比如: 找不到产品 字段“XXX”的值不正确 该产品没有可用库存 等等 然后显示系统通知 public static void setDefaultErrorHandler(ErrorEvent errorEvent) {

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

我在使用Vaadin 8的其他应用程序中实现了这一点,效果非常好。这个想法在我的后端服务中引发了一个SGIEException,比如:

  • 找不到产品
  • 字段“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;
        }
在视图中显示以下内容:

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


这是一种恶劣的行为,目前在瓦丁10中是无法克服的。关注并投票(竖起大拇指或发表评论)这个问题以解决它:

这是一种恶劣的行为,目前在Vaadin 10中无法被推翻。关注并投票(竖起大拇指或发表评论)此问题以解决:

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