Ответ 1
java.io.NotSerializableException
Такое исключение обычно представляет собой сообщение в корневой причине, которое показывает полное имя класса, которое не реализует Serializable
. Вы должны обратить пристальное внимание на это сообщение, чтобы узнать, о каком классе он говорит, а затем позволить ему реализовать Serializable
соответственно.
Зачастую создание только упорядоченных классов bean сериализуется не всегда. Вам также необходимо убедиться, что каждый из его свойств также сериализуем. Большинство стандартных типов, таких как String
, Long
и т.д., Реализуют все уже Serializable
. Но (настраиваемые) сложные типы, такие как вложенные beans, сущности или EJB, должны также быть сериализуемыми. Если что-то не реализуется как Serializable
, например InputStream
, то вы должны либо перепроектировать модель, либо сделать ее transient
(и помните, что после десериализации она будет null
).
В чем разница, когда я использую клиент и сервер
Вначале некоторая справочная информация: Почему JSF сохраняет состояние компонентов пользовательского интерфейса на сервере?
Основное техническое отличие состоит в том, что параметр client
сохраняет все состояние представления как значение скрытого поля ввода javax.faces.ViewState
в сгенерированном HTML-выходе и что параметр server
сохраняет его в сеансе вместе с уникальный идентификатор, который в свою очередь упоминается как значение скрытого поля ввода javax.faces.ViewState
.
Таким образом, установка на client
увеличивает использование пропускной способности сети, но уменьшает использование памяти сервера, а настройка на server
выполняется наоборот. Тем не менее, установка в client
имеет дополнительное функциональное преимущество: она предотвращает ViewExpiredException
, когда сессия истекла или когда клиент открывает слишком много просмотров.