2015-08-19 3 views
0

У меня есть веб-приложение, использующее структуру Wicket. Он имеет форму, которая берет вход пользователя и отправляется, перенаправляется на другую страницу. После отправки формы и нажатия кнопки возврата браузера предыдущая форма извлекается из кеша с введенными значениями. Мне нужно переопределить это поведение и перенаправить на последнюю страницу (оставайтесь на той же странице), когда нажата кнопка назад. Возможно ли это в Wicket? Если да, пожалуйста, помогите мне, как это сделать. Спасибо.Wicket - перенаправление на ту же страницу при нажатии кнопки назад браузера

ответ

1

Wicket обрабатывает URL-адреса, поэтому если запрашивается предыдущая страница, она распознается идентификатором страницы, который по умолчанию добавляется к URL-адресу, например. http: /dummyexample.com? 1

Что я использую для решения этой проблемы - это механизм потока, который содержит состояние объекта модели внутри него. Например. у вас есть модельный объект типа MyFlow, содержащий поле 'String currentState'. В этом случае, если вам нужна неправильная страница, которая не принадлежит к стадии вашего потока, вы можете перенаправить на соответствующую страницу с помощью controcutor или onIntialize(), бросая «RestartResponseException», что вызывает перенаправление на новую страницу.

+0

Спасибо за ответ Martin. Но форма и ее данные сериализуются перед перенаправлением на следующую страницу, а при нажатии кнопки «Назад» браузера Wicket десериализует и возвращает ту же форму. Поэтому конструктор или onInitialize() не будет вызываться. Как проверить текущее состояние в этом состоянии? – kasper360

+0

Вы имеете право на сериализацию. Во всяком случае, я уже решил аналогичную ситуацию. Я отвечу позже, у меня нет этого проекта, чтобы увидеть мое реальное решение и поделиться им. Но я предполагаю, что я добавил хэш потока в URL-адреса, и в пользовательском сеансе есть карта, где я ищу последнее состояние объекта, чтобы предотвратить проблему сериализации. –

+1

Улучшение ответа Мартина вместо того, чтобы бросать «RestartResponseException» внутри конструктора или onInitialize(), бросая его внутри onBeforeRender(), выполняет свою работу. onBeforeRender() гарантированно будет вызываться, когда страница будет снова построена, а также десериализована. – kasper360

0

Просто используйте Ajax submit, таким образом, пользователь не может вернуться к форме ввода через кнопку «Назад».

+0

Я уже использую AjaxSubmitLink для отправки данных. Но все же это не решает проблему. – kasper360

Смежные вопросы