【发布时间】:2013-01-11 09:59:04
【问题描述】:
我正在使用 JSF 2.1、Richfaces 4.2.2,对于下面提到的代码,我得到了 java.io.NotSerializableException: org.richfaces.component.SavedState 异常。
Bean 作用域:会话
面码:
<rich:dataTable id="table" value="#{mapActivityGroup.addActivityGroupModelList}"
var="model">
<rich:column>
<h:selectBooleanCheckbox id="checkBox" value="#{model.selected}" />
</rich:column>
<rich:column filterValue="#{mapActivityGroup.categoryFilter}"
filterExpression="#{fn:containsIgnoreCase(model.categoryName,
mapActivityGroup.categoryFilter)}" >
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Category" />
<h:inputText value="#{mapActivityGroup.categoryFilter}">
<a4j:ajax render="table" execute="@this" event="blur" />
</h:inputText>
</h:panelGroup>
</f:facet>
<h:outputText value="#{model.categoryName==null?'':model.categoryName}"/>
</rich:column>
</rich:dataTable>
例外:
java.io.NotSerializableException: org.richfaces.component.SavedState
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
java.util.HashMap.writeObject(HashMap.java:1100)
sun.reflect.GeneratedMethodAccessor1947.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170)
java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362)
我用谷歌搜索过,但找不到任何实质性的东西。有谁知道为什么会这样?
【问题讨论】:
-
它在到目前为止发布的代码中不可见,但症状表明您将
UIComponent引用为 bean 属性。这是真的?您不应该在启用了 JSF2 部分状态保存的视图/会话范围的 bean 中这样做,而只能在请求范围的 bean 中这样做,因为应该基于每个请求创建 UI 组件。 -
不,我没有使用任何
UIComponent作为 bean 属性。但是,当我删除h:selectBooleanCheckbox时,它工作正常。 -
@BalusC 我尝试将 bean 范围更改为
request,但这也没有用。 -
这很奇怪。哪个 JSF 实现/版本?
-
哎呀,已经快 3 岁了。您是否有机会将其升级到最新版本?您可以从javaserverfaces.java.net下载。