continueToOriginalDestination не возвращает меня на исходную страницу

Я пытаюсь войти в свою заявку. Сначала я выбрасываю исключение RestartResponseAtInterceptPageException (это есть в WicketPanel на моей BasePage):

add(new Link<String>("signin") {
   @Override
   public void onClick() {
       throw new RestartResponseAtInterceptPageException(SignIn.class);
   }
});

Класс SignIn Page содержит форму (внутренний закрытый класс) для входа со следующей кнопкой отправки:

add(new Button("signinButton") {

    @Override
    public void onSubmit() {
        final User user = model.getObject();
        final boolean result = MySession.get().authenticate(user);
        if (result) {
            if (!continueToOriginalDestination()) {
                setResponsePage(MySession.get().getApplication().getHomePage());
            }
         } else {
            error("Authentication failed");
         }
    }
 });

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

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

Кстати, это калитка 1.5.1.

Небольшое обновление, потому что я получил подсказку, в которой я нуждался из ответа, все еще есть немного объяснений, которые нужно сделать. Решение выглядит так:

add(new Link<String>("signin") {
    @Override
    public void onClick() {
         setResponsePage(new SignIn(getPage()));
    }
});

Класс SignIn получает конструктор, который, очевидно, берет страницу, и я просто устанавливаю эту страницу как setResponsePage, чтобы вернуться туда, где я начал, без продолжения continueToOriginalDestination и исключения.

1 ответ

Решение

RestartResponseAtInterceptPageException предназначен для перенаправления на страницу перехвата при отображении страницы. Например, в конструкторе класса Page ProtectedPage, если пользователь не вошел в систему, вы throw new RestartResponseAtInterceptPageException(SignIn.class), Когда SignIn вызовы страницы continueToOriginalDestination()пользователь возвращается к оригиналу ProtectedPage место назначения.

Ваше использование не является типичным использованием RestartResponseAtInterceptPageException так как вы бросаете его в обработчик ссылок. Почему бы тебе не сделать setResponsePage(SignIn.class) прямо вместо? Если вы действительно хотите вернуться на ту страницу, на которой вы были, когда нажата ссылка "войти", вы также можете попробовать изменить ее на:

add(new Link<String>("signin") {
   @Override
   public void onClick() {
       setResponsePage(getPage());
       throw new RestartResponseAtInterceptPageException(SignIn.class);
   }
});
Другие вопросы по тегам