Почему setDefaultErrorHandler вылетает из моего представления в потоке vaadin? - PullRequest
0 голосов
/ 27 августа 2018

Я написал свой собственный обработчик ошибок для пользовательского интерфейса в потоке Vaadin. Но когда я выкидываю исключение, мое представление перестает работать и не показывает читаемое человеком сообщение об ошибке.

Я сделал это в другом приложении, используя 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 голосов
/ 28 августа 2018

Это неприятное поведение, которое в настоящее время нельзя изменить в Vaadin 10. Следуйте и проголосуйте (большой палец вверх или комментарий), чтобы решить эту проблему: https://github.com/vaadin/flow/issues/801

...