Что такое параметр STATE_SAVING_METHOD в JSF 2.0

Я не могу понять, какова функция этой строки в web.xml

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>

Я прочитал, что по умолчанию NetBeans - это клиент. Я только что столкнулся с проблемой, что у меня есть много компонентов в моем приложении, и <param-value> был установлен на клиента, поэтому я получал

java.io.NotSerializableException

ошибка, хотя мои компоненты были Serializable (т.е. они реализовали интерфейс Serializable.). Мои бобы были в @ViewScope. Но когда я изменил его на сервер, все будет работать. Зачем? Какая разница, когда я использую клиента и сервера. Может ли кто-нибудь объяснить мне с помощью примера.

Спасибо

2 ответа

Решение
java.io.NotSerializableException

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

Зачастую сделать сериализуемые только ваши управляемые классы компонентов не всегда достаточно. Вы также должны убедиться, что каждое из его свойств также сериализуемо. Большинство стандартных типов, таких как String, Longи т. д. уже все реализовали Serializable, Но (пользовательские) сложные типы, такие как вложенные bean-компоненты, сущности или EJB-компоненты, должны также быть сериализуемыми. Если что-то на самом деле не реализуемо, как Serializable, такие как InputStreamто вам стоит либо переделать модель, либо сделать transient (и имейте ввиду, что это будет null после десериализации).


Какая разница, когда я использую клиент и сервер

Сначала некоторая справочная информация: почему JSF сохраняет состояние компонентов пользовательского интерфейса на сервере?

Основное техническое отличие состоит в том, что client настройка сохраняет все состояние просмотра в качестве значения javax.faces.ViewState скрытое поле ввода в сгенерированном выводе HTML и что server параметр сохраняет его в сеансе вместе с уникальным идентификатором, который в свою очередь упоминается как значение javax.faces.ViewState скрытое поле ввода.

Итак, установка на client увеличивает использование пропускной способности сети, но уменьшает использование памяти сервера и настройку на server делает наоборот Установка на client имеет, однако, дополнительное функциональное преимущество: он предотвращает ViewExpiredExceptions, когда сеанс истек или когда клиент открывает слишком много просмотров.

javax.faces.STATE_SAVING_METHOD Параметр используется для указания места сохранения состояния.

Если вы хотите сохранить состояние на сервере (которое используется по умолчанию в эталонной реализации JavaServer Faces), укажите param-value значение как server,

В противном случае, чтобы сохранить состояние на стороне клиента, мы можем указать client в param-value,

Если состояние сохраняется на клиенте, состояние всего представления отображается в скрытом поле на странице.

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