好的,这里是页面的代码
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]&lt; -----不可序列化的字段
另外我想要注意的是,我在列表中显示的对象最初是从库中获取的,不可序列化。 Wicket希望列表中的可序列化对象,以便处理它我采用每个对象并使其可以像这样使用类进行序列化
public class WeinSyncFileContent extends SyncFileContent implements Serializable{
public WeinSyncFileContent(SyncFileContent obj){
... setting fields ...
}
}
所以最初我得到了SyncFileContent对象(不可序列化) 我该怎么办?
答案 0 :(得分: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)
{
....
}
});
}