Безопасна ли кнопка возврата в JSF 2.0 View Scope?

Безопасна ли JSF 2.0 View Scope "кнопка назад"? например, если я сохраню модель в View Scope и перейду со страницы 1, страницы 2, страницы 3, на страницу 4, изменяя объект модели по пути (через поля ввода), а затем дважды нажимаю кнопку "Назад", чтобы вернуться на страницу 2 и внесите изменения (перенеся меня снова на страницу 3), будут ли модели в области видимости иметь только те изменения, которые были сделаны при первоначальной визуализации страницы 2, или будут изменения на более поздних страницах?

В Oracle ADF было / есть что-то под названием "область действия процесса", которая обрабатывает это, разбивая то, что помещается в сеанс, поэтому каждая страница имеет свою собственную копию модели.

1 ответ

Решение

Для начала область просмотра привязана к определенной странице / представлению. Несколько представлений не будут использовать один и тот же компонент видимости. Область просмотра начинается с начального запроса GET и останавливается, когда действие POST перемещается сnull возвращаемое значение

В общем случае существуют следующие сценарии, в зависимости от того, указана ли в браузере инструкция для кэширования страницы или нет, и конфигурации сохранения состояния JSF. Я предполагаю, что навигация между этими страницами осуществлялась с помощью запроса POST (как это выглядит в сценарии "Wizard").

Когда нажата кнопка "Назад":

  • Если браузеру дано указание сохранить страницу в кэше, браузер загрузит страницу из кэша. Все ранее введенные входные значения будут появляться из кэша браузера (таким образом, не из bean-объекта области видимости на стороне сервера!). Поведение при выполнении запроса POST на этой странице зависит далее от javax.faces.STATE_SAVING_METHOD настройка конфигурации:
    • Если установлено server (по умолчанию), затем ViewExpiredException произойдет, потому что состояние просмотра удаляется на стороне сервера сразу после POST-навигации с одной страницы на другую.
    • Если установлено client, тогда это будет просто работать, потому что все состояние представления содержится в скрытом поле ввода формы.
  • Или, если браузеру дано указание не сохранять страницу в кеше, браузер отобразит страницу ошибки по умолчанию браузера "Страница истекла". Только когда для навигации был применен шаблон POST-redirect-GET, браузер отправит новый запрос GET по тому же URL-адресу, что и URL-адрес перенаправления. Все ранее введенные входные значения будут по умолчанию очищены (потому что bean-объект области видимости воссоздан), но если в браузере включена функция "автозаполнение" (настраивается на уровне браузера), то, возможно, он автоматически заполнит входные данные. Это можно отключить, добавив autocomplete="off" атрибут для входных компонентов. Когда вы выполняете запрос POST на этой странице, он будет работать независимо от способа сохранения состояния JSF.

Проще выполнить сценарий "Мастер" в одном представлении, которое содержит условно отображаемые шаги и предлагает кнопку "Назад" в самом разделе мастера.

Смотрите также:

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