Вопрос по jsf-2 – Должно ли PARTIAL_STATE_SAVING быть установлено в false?

8

Похоже, что сегодня (апрель 2012 года) реализации MySaces и JSF 2.1 компании Mojarra имеют дефекты, связанные с частичным сохранением состояния, и для PARTIAL_STATE_SAVING должно быть установлено значение false.

Это правда?

Код MyFaces в порядке. На данный момент нет открытых вопросов, связанных с PSS (2012-APR). Все работает как положено. lu4242

Ваш Ответ

1   ответ
26

Should PARTIAL_STATE_SAVING be set to false?

Only когда вы сталкиваетесь с общим дефектом, связанным с частичным сохранением состояния в вашем веб-приложении, которое можетreally not быть решенным / обойти другим путем. Частичное сохранение состояния имеет, в частности, основные преимущества в отношении общей производительности и использования памяти. Смотрите такжеПочему JSF сохраняет состояние компонентов пользовательского интерфейса на сервере?

Я не могу на 100% достоверно говорить за MyFaces, но в Mojarra коренная причина проблем, связанных с частичным сохранением состояний, проявится, когда вы связываете любой атрибут обработчика тега (обработчики тегов распознаются по причине отсутствияrendered атрибута тега (например, теги JSTL) для bean-объекта области видимости или когда вы привязываетеid или жеbinding атрибут компонента JSF для bean-объекта области видимости (эти атрибуты, в частности, разрешаются во время построения / восстановления представления).

Эта проблема вызвана проблемой куриного яйца, как описано вВыпуск JSF 1492 а такжеJSF спецвыпуск 787: при включенном сохранении частичного состояния bean-объекты видимости были сохранены в состоянии частичного просмотра. Таким образом, для извлечения bean-объектов видимости необходимо восстановить состояние частичного представления. Во время восстановления (построения) представления будет проверяться EL во всех вышеупомянутых атрибутах. Однако, поскольку в данный момент нет доступного экземпляра bean-объекта в области видимости, будет создан новый экземпляр. Однако все его свойства будут установлены по умолчанию! После восстановления представления и получения исходных объектов видимости bean-компоненты возвращаются в область действия представления, переопределяя (временные) экземпляры, созданные во время восстановления представления. Но выражения EL этих атрибутов уже были оценены на основе совершенно другого экземпляра и не могут быть восстановлены.

Эта проблема с куриным яйцом решена начиная с Mojarra 2.1.18 и 2.2.0 путем сохранения в сессии бобов видимости. Если по какой-либо причине вы не можете выполнить обновление, это действительно можно решить, отключив частичное сохранение состояния, установивjavax.faces.PARTIAL_STATE_SAVING вfalse, Альтернативой является простоnot свяжите вышеупомянутые атрибуты с bean-объектом вида, но ищите альтернативное решение.

Вы также можете установитьjavax.faces.FULL_STATE_SAVING_VIEW_IDS вместо. Это позволяет вам указать список всех идентификаторов представлений, разделенных запятыми, для которых необходимо отключить частичное сохранение состояния:

<context-param>
    <param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name>
    <param-value>/some.xhtml,/other.xhtml</param-value>
</context-param>

Это позволяет максимально эффективно использовать частичное сохранение состояния и отключать его только для подмножества представлений, в которых проблемы, связанные с частичным сохранением состояния, действительно не могут быть устранены.

See also:

@JoshuaH: & quot; просмотр идентификатора & quot; это просто абсолютный путь веб-контента к физическому файлу. Пример в моем ответе указывает на два файла:/some.xhtml а также/other.xhtml.
какой формат для просмотра идентификаторов? и с чего начать?
Ааа ... не понял, что javax.faces.FULL_STATE_SAVING_VIEW_IDS существует. Рад, что они добавили ... Спасибо. Лучшее из обоих миров, пока не будет найдено правильное решение. BestPractices

Похожие вопросы