当我访问我的Wicket应用程序的特定页面时,我收到NotSerializableException:
java.io.NotSerializableException: my.package.MyPanel$1
但我无法解释为什么wicket应该尝试序列化 Panel 。有什么想法吗?
我不知道它是否有帮助,但这是我用来添加面板的代码:
final User profileUser = ...;
final IModel<User> loggedInUser = ...;
add(new MyPanel("panelid", new Model<MyObject>(new MyObject()))
{
@Override
public boolean isVisible()
{
return profileUser != null && profileUser.equals(loggedInUser.getObject());
}
});
答案 0 :(得分:5)
Wicket将许多内容序列化到会话中,作为处理群集的方法的一部分。
Wicket中的所有内容(最终)扩展Component
,其中IClusterable
实现Serializable
扩展LoadableDetachableModel
。因此,在Wicket中创建的面板等组件需要可序列化。
通常的做法是创建包含普通业务对象的{{1}}类,其逻辑只在会话中存储密钥并使用该密钥重新加载。
如果您将这些模型用作组件中的字段而不是完整的业务对象,则会使会话内存更加紧张。