1

好的,这是页面的代码

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 时出错

它抱怨事务字段:事务 [class=java.util.ArrayList$SubList] <----- 不可序列化的字段

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

public class WeinSyncFileContent extends SyncFileContent implements Serializable{

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

}

}

所以最初我得到了 SyncFileContent 对象(不可序列化) 我能做些什么来处理这些错误?

4

1 回答 1

4

您收到此错误是因为您的 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)
       {
          ....
       }
    });
}
于 2013-05-31T13:42:30.360 回答