Второй обработчик исключений в Vaadin не работает

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

Я также использую Api, который выдает NotLoggedinException, если пользователь не аутентифицирован. В этом случае пользователь переходит к представлению входа в систему.
Но использование второго представления для обработки исключений просто не работает.

Код ошибки просмотра:

@Route("error")
public class ErrorPage extends VerticalLayout implements HasErrorParameter<RuntimeException> {

    private final H1 label = new H1("Internal Server Error something went wrong! Please notify your administrator.");

    public ErrorPage() {
        super.add(label);
    }

    @Override
    public int setErrorParameter(BeforeEnterEvent event, ErrorParameter<RuntimeException> parameter) {
        Logger.getLogger(ErrorPage.class).log(Logger.Level.FATAL, "Unexpected Exception!", parameter.getCaughtException());

        return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
    }
}

Просто распечатывается stackstrace и больше ничего.

Представление входа в систему работает должным образом.

@Route("")
public class LoginView extends VerticalLayout implements HasErrorParameter<NotLoggedInException> {


    private final TextField username = new TextField(RESOUCE_BUNDLE.getString("username"));
    private final PasswordField passwordField = new PasswordField(RESOUCE_BUNDLE.getString("password"));
    private final Button loginButton = new Button(RESOUCE_BUNDLE.getString("login"));


    public LoginView() {
        add(username, passwordField, loginButton);
        super.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);

        loginButton.addClickListener((event) -> {
            tryLogin();
        });

        loginButton.addClickShortcut(Key.ENTER);
        username.focus();
    }

    private void tryLogin() {
        try {
            login();
        } catch (URISyntaxException ex) {
            Notification.show("Impossible to connet to backend, please notify our administrator!", -1, Notification.Position.TOP_START);
            Logger.getLogger(LoginView.class.getName()).log(Level.SEVERE, "URL syntax error please check your hostname and port!", ex);
        } catch (IOException ex) {
            Notification.show("Internal Error, Failed to connect to backend", -1, Notification.Position.TOP_START);
            Logger.getLogger(LoginView.class.getName()).log(Level.SEVERE, "Failed to connect to " + this.apiService.getHostURL(), ex);
        } catch (UnexpectedResultCodeException e) {
            UserNotification.showBackenComminucationError();
            Logger.getLogger(LoginView.class.getName()).log(Level.SEVERE, "Unexpected result code at login", e);
        }
    }

    private void login() throws IOException, URISyntaxException {
         // backend login
    }

    @Override
    public int setErrorParameter(BeforeEnterEvent event, ErrorParameter<NotLoggedInException> parameter) {
        return HttpServletResponse.SC_FORBIDDEN;
    }
}

0 ответов

Другие вопросы по тегам