Что такое параметр 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
имеет, однако, дополнительное функциональное преимущество: он предотвращает ViewExpiredException
s, когда сеанс истек или когда клиент открывает слишком много просмотров.
javax.faces.STATE_SAVING_METHOD
Параметр используется для указания места сохранения состояния.
Если вы хотите сохранить состояние на сервере (которое используется по умолчанию в эталонной реализации JavaServer Faces), укажите param-value
значение как server
,
В противном случае, чтобы сохранить состояние на стороне клиента, мы можем указать client
в param-value
,
Если состояние сохраняется на клиенте, состояние всего представления отображается в скрытом поле на странице.