Можно ли явно запретить JSF сериализовать некоторые деревья компонентов? В настоящий момент я передаю объект без сериализации для <h:inputText>
:
<h:inputText value="#{nonSerializableBean.nonSerializableClassInstance}" />
Что происходит после нескольких щелчков мыши, которые я получаю (при восстановлении просмотров):
javax.faces.FacesException: Unexpected error restoring state for component
with id configurationForm:j_idt292:j_idt302:field. Cause:
java.lang.IllegalStateException: java.lang.InstantiationException:
my.namespace.NonSerializableClass
Я думаю, это происходит потому, что JSF не может восстановить nonSerializableClassInstance
:
Caused by: java.lang.IllegalStateException: java.lang.InstantiationException: com.foobar.utils.text.Period
at javax.faces.component.StateHolderSaver.restore(StateHolderSaver.java:110)
at javax.faces.component.ComponentStateHelper.restoreState(ComponentStateHelper.java:292)
at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1444)
at javax.faces.component.UIOutput.restoreState(UIOutput.java:255)
at javax.faces.component.UIInput.restoreState(UIInput.java:1359)
Бонусный вопрос: нормально ли делать резервную копию beans Serializable? Должно ли это предотвратить сериализацию/десериализацию этих?
Некоторая предыстория:
У нас есть группа сторонних классов, которые нам необходимо предоставить в JSF. Проблема в том, что мы не можем напрямую использовать эти классы на страницах JSF, потому что они не реализуют интерфейс Serializable и, следовательно, будут/должны потерпеть неудачу, если среда выполнения JSF решит сериализовать/десериализовать страницу и дерево компонентов. Классы "закрыты", и нам не разрешено изменять их.
Запуск Mojarra 2.0.2.