Второй обработчик исключений в 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;
}
}