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

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

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

Ответ 1

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

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

При нажатии кнопки "Назад":

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

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

См. также: