我试图将一个searchService传递给一个Form to Wicket来使用。 当我在没有问题的情况下运行它时,我没有遇到任何问题,但是为了在覆盖的onSubmit中使用它,我必须使它成为最终版本。
final SearchService searchService = new SearchService();
Form<?> form = new Form("searchForm") {
public void onSubmit() {
List<File> results = searchService.getSearchResults();
info("Found: " + results.size());
}
};
如果我这样做,我会收到错误:
org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream$ObjectCheckException: The object type is not Serializable!
A problem occurred while checking object with type: test.service.SearchService
Field hierarchy is:
2 [class=test.webui.HomePage, path=2]
private java.lang.Object org.apache.wicket.MarkupContainer.children [class=[Ljava.lang.Object;]
private java.lang.Object org.apache.wicket.MarkupContainer.children[1] [class=org.apache.wicket.markup.html.form.Form, path=2:searchForm]
private final test.service.SearchService test.webui.HomePage$1.val$searchService [class=test.service.SearchService] <----- field that is causing the problem
我是wicket的新手,所以我想知道是否有正确的方法来做到这一点?
答案 0 :(得分:4)
是。这是预期的行为。
Wicket将序列化整个页面。实际上,整个页面流。
您看到的错误很棒,因为它可以帮助您使应用程序在复制的会话群集中工作。
要解决它,你有几个选择。在我的头顶:
答案 1 :(得分:0)
您可以尝试对Serializable
类实现SearchService
并声明变量serialVersionUID
。
例如:
public class SearchService implements Serializable {
private static final long serialVersionUID = -1769512858853931584L;
//your code
}