serialization - Wicket:如何摆脱 Wicket NotSerializedException?

标签 serialization wicket

好的,这是页面的代码

public class ViewDocument extends BasePage{

    private List<WeinSyncFileContent> transactions;
    ....

    public ViewDocument(){
        transactions = ....;
        ....
        listContainer.add(listView = new ListView<WeinSyncFileContent>("transactions", transactions){
           @Override
           public void populateItem(final ListItem<WeinSyncFileContent> item)
           {
              ....
           }
        });
    }
}

该页面确实显示,但出现错误: 序列化对象类 kz.wein.wicket.pages.documents.ViewDocument 时出错

它提示交易字段: transactions [class=java.util.ArrayList$SubList] <----- 不可序列化的字段

此外,我想指出的是,我在列表中显示的对象最初是从库中获取的,并且不可序列化。 Wicket 想要列表中的可序列化对象,因此为了处理它,我获取每个对象并使用这样的类使其可序列化

public class WeinSyncFileContent extends SyncFileContent implements Serializable{

public WeinSyncFileContent(SyncFileContent obj){
    ... setting fields ...

}

}

所以最初我得到 SyncFileContent 对象(不可序列化) 对于这些错误我该怎么办?

最佳答案

您收到此错误是因为 Wicket 页面中的任何字段级变量都将被序列化。因此,不要将任何不可序列化的对象作为字段级变量可能是个好主意。您的 WeinSyncFileContent 中必须有一个不可序列化的对象,这就是您收到此错误的原因。

您可能想使用模型来加载列表,例如:

public ViewDocument(){

    ...

    listContainer.add(new ListView<WeinSyncFileContent>(
        "transactions", 
        new LoadableDetachableModel<List<WeinSyncFileContent>>() {
            protected List<WeinSyncFileContent> load() {
                return ...;
            }
        })
    {
       @Override
       public void populateItem(final ListItem<WeinSyncFileContent> item)
       {
          ....
       }
    });
}

关于serialization - Wicket:如何摆脱 Wicket NotSerializedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855252/

相关文章:

c# - 元组无法序列化,因为它没有无参数构造函数

java - 关于 Wicket 7 中 wicket.properties 位置的冲突警告

c# - 如何比较两个 .NET 对象图的差异?

c# - 是否有类似 ISerializable 的东西适用于 XMLSerializer?

java - 无法在 Java 中反序列化 MultivaluedHashMap<String, String>

Wicket 9 和 Tomcat 10 无法转换 jakarta.servlet.Filter

netbeans - 无法在 tomcat7 上运行 wicket 示例

java - session 值未存储在使用 Chrome 的 wicket 应用程序中

javascript - Wicket 6 - 使用 AjaxCallListener 防止 jQuery 调用将页面滚动到顶部

System.Type 的 C# 反序列化从加载的程序集中抛出类型