【发布时间】:2011-01-04 12:41:29
【问题描述】:
是否可以明确拒绝 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)
一个额外的问题:可以不使支持 bean 可序列化吗?那么这是否应该阻止这些的序列化/反序列化?
一些背景:
我们有一堆需要在 JSF 中提供表单的 3rd 方类。问题是我们不能直接在 JSF 页面上使用这些类,因为它们没有实现 Serializable 接口,因此如果 JSF 运行时决定序列化/反序列化页面和组件树,将会/应该失败。这些类是“关闭的”,我们不能修改它们。
运行 Mojarra 2.0.2。
【问题讨论】:
-
the 页面和这些 类是什么意思?我不确定如何将 JSF 中的页面声明为可序列化。你能更明确一点吗,例如通过提供一些代码示例?
-
对不起,我指的是支持豆。 JSF 中没有 pages 是正确的(尽管有 ViewRoot)。我的想法确实存在问题,我会更新问题以更好地反映问题。
标签: jsf serialization jsf-2