continueToOriginalDestination не возвращает меня на исходную страницу - PullRequest
1 голос
/ 20 ноября 2011

Я пытаюсь войти в свое приложение. Сначала я выбрасываю исключение 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 Ответ

6 голосов
/ 21 ноября 2011

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);
   }
});
...