【问题标题】:Richfaces datatable exception: java.io.NotSerializableExceptionRichfaces 数据表异常:java.io.NotSerializableException
【发布时间】: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下载。

标签: jsf richfaces


【解决方案1】:

在 web.xml 中,我将 javax.faces.STATE_SAVING_METHOD 更改为 server 并且它起作用了。

【讨论】:

  • 这就是方法,但这不是您遇到问题的原因。支持 bean 的成员变量不可序列化(未实现 java.io.Serializable),因此导致视图序列化失败。将 complex/pojo 类型的成员变量标记为transient
  • @kolossus 在我处理它时,我尝试通过为支持 bean 实现 java.io.Serializable 来尝试,但是它也没有那样工作。
  • 不仅仅是你的托管bean需要序列化,bean的成员变量和属性也需要序列化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多