Пользовательское сообщение об ошибке Vaadin

Веб-фреймворк Vaadin отображает красное предупреждение об ошибке для любых неперехваченных исключений:

Внутренняя ошибка

Пожалуйста, сообщите администратору

...

В документации Vaadin описано, как настроить собственный обработчик ошибок.

Когда я предоставляю пользовательский обработчик ошибок, все еще отображается красное предупреждение об ошибке по умолчанию. Когда пользователь отклоняет это предупреждение об ошибке, появляется пользовательское предупреждение об ошибке. Я хотел бы показывать только пользовательское предупреждение об ошибке. Как можно отключить оповещение о внутренней ошибке по умолчанию?

Ниже приведен переопределенный метод terminalError моего класса приложения vaadin:

@Override   public void terminalError(Terminal.ErrorEvent event) {
    // Call the default implementation.
    super.terminalError(event);

    // Some custom behaviour.
    if (getMainWindow() != null) {
        getMainWindow().showNotification(
                "An unchecked exception occured!",
                event.getThrowable().toString(),
                Notification.TYPE_ERROR_MESSAGE);
    }   }

person byneri    schedule 19.09.2011    source источник


Ответы (3)


Оба действия происходят, потому что вы вызываете super.terminalError(event)?

Или вам нужно сбросить ошибку компонента, которая установить в этом методе?

person Paul Grime    schedule 19.09.2011
comment
Даже если я закомментирую вызов super.terminalError(event), он покажет встроенную внутреннюю ошибку - person byneri; 20.09.2011
comment
Когда я использую метод terminalError (событие Terminal.ErrorEvent), используемый в опубликованной вами ссылке, он по-прежнему отображает встроенную внутреннюю ошибку. - person byneri; 20.09.2011
comment
Нет извините. Я сослался на метод, чтобы показать вам, что он устанавливает ошибку компонента. Мой вопрос был в том, можете ли вы удалить/очистить эту ошибку? Как setComponentError(null). - person Paul Grime; 20.09.2011
comment
setComponentError не имеет никакого эффекта. Я заметил, что иногда я получаю диалоговое окно пользовательской ошибки, а иногда — встроенный диалог внутренней ошибки. Настраиваемое диалоговое окно ошибки появляется, когда Exception вызывается из внутреннего класса Button.ClickListener. Но когда возникает исключение из внутреннего класса DefaultAbsoluteLayoutDropHandler, появляется встроенный диалог - person byneri; 21.09.2011

Вы должны определить статический метод с именем getSystemMessages в своем классе Application, который будет возвращать объект CustomizedSystemMessages. Если вы вызовете метод setInternalErrorNotificationEnabled с параметром false, "внутренняя ошибка" исчезнет. Таким образом, вы можете отключить встроенные уведомления Vaadin и для других типов ошибок.

Вы можете указать URL-адрес, вызвав setInternalErrorURL, чтобы Vaadin перенаправлял вашу страницу на этот URL-адрес всякий раз, когда возникает внутренняя ошибка. Вы можете отобразить сообщение об ошибке на этой странице. Эта страница также может быть окном Vaadin.

person ksevindik    schedule 26.01.2012

Пол прав: вы должны удалить вызов супер.

Для работы я сделал следующее в своем подклассе Application:

setErrorHandler(this); // dont know why it's doesn't work without this instruction.

и я переопределяю метод terminalError без вызова super.terminalError().

С уважением, Эрик

person Community    schedule 19.09.2011
comment
Я убрал вызов super.terminalError(event), а также установил setErrorHandler(this); в методе init(). Он по-прежнему отображает встроенное сообщение о внутренней ошибке. Мой метод terminalError получает вызов, потому что я вижу его запись в журнале. - person byneri; 20.09.2011