Безопасна ли кнопка возврата в JSF 2.0 View Scope? - PullRequest
12 голосов
/ 29 марта 2012

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

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

1 Ответ

18 голосов
/ 29 марта 2012

Для начала область просмотра привязана к определенной странице / представлению.Несколько представлений не будут использовать один и тот же видовой объект.Область просмотра начинается с начального запроса 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.

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

См. также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...