好的,这是页面的代码
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/