0

我提前道歉,诚然我对 Wicket 缺乏了解。我读到使用 LoadableDetachableModel 会阻止对象被序列化,但是在多次运行测试后,我可以看到它仍然被序列化(有时在会话超时或超时后页面加载之后)。我想也许我没有正确使用模型。任何帮助或方向将不胜感激。

代码如下所示:

    ...
    LoadableDetachableModel ldm = new LoadableDetachableModel<SomeSettings>() {
        @Override
        public SomeSettings load() {
            if (someSettingsDao == null) someSettingsDao = new SomeSettingsDao(); 

            return someSettingsDao.Retrieve("1") == null ? new SomeSettings()
                  : (SomeSettings) someSettingsDao.Retrieve("1");
        }
    };

    final Form<SomeSettings> form = new Form<SomeSettings>("someSettings", new CompoundPropertyModel<SomeSettings>(ldm)) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit() {
            if (someSettingsDao == null) someSettingsDao = new SomeSettingsDao();

            if (someSettingsDao.Retrieve("1") != null)
                someSettingsDao.Update(getModelObject());
            else
                someSettingsDao.Insert(getModelObject());

        setResponsePage(UserPanel.someSettingsPageProvider.getPageClass());
        }

    };
    ...

是我对模型的使用吗?或者数据是如何持久化的?谢谢。

4

1 回答 1

0

你说的对。当 Wicket 决定持久化时,数据会被持久化/序列化。呈现组件/页面后,所有组件和模型都将被分离。这意味着可加载的可拆卸模型将其内部模型分离,并且没有要序列化的内容。当然,序列化是在页面呈现后进行的,不需要将其保存在内存中。

于 2013-06-14T21:49:46.033 回答