【问题标题】:wicket auto refresh datatable caches valueswicket 自动刷新数据表缓存值
【发布时间】:2013-09-03 20:09:45
【问题描述】:

我在面板内使用数据表,面板设置为每 60 秒自动刷新一次。面板有时似乎会提取未传递给对象的值。我正在使用 PropertyColumn 向数据表中添加列。有没有办法专门禁用检票口或数据表中的缓存

我有一个返回联系人列表的网络服务。这个列表被传递到下面的所有面板

在 LoadContactPanel 中 new ContactPanel(ViewPanel.getContentPanelId() , getContactListModel());

public IModel<List<Contact>> getContactListModel() {
    List<Contact> listofmodels = //get list from a webservice call
    return new ListModel<>(listofmodels);
}

在 ContactPanel 中,我加载了另一个名为 AccordianPanel 的面板

AccordianPanel 包含一个 RepeatingView

每个 RepeatingView 都是一个面板,在面板中,我添加了一个 DefaultDataTable

DefaultDataTable 的来源是 ContactDataProvider 扩展 SortableDataProvider

这是ContactDataProvider中模型方法的代码

@Override
public IModel<Contact> model(final Contact object) {

    return new AbstractReadOnlyModel() {
        private static final long serialVersionUID = 1L;

         @Override
        public Object getObject() {
                return object;
        } 
    };
}

在这种情况下,应该将什么转换为LoadableDetachableModel。从 web 服务返回的一个或 ContactDataProvider 中的一个

【问题讨论】:

    标签: wicket


    【解决方案1】:

    也许您正在从存储在内存中的模型加载数据。每次渲染组件时,您应该使用LoadableDetachableModel 加载数据。由于您提供的细节太少,不确定它是否回答了您的问题,请显示一些代码。

    【讨论】:

    • 但是你应该确保调用了“分离”;否则你最终会遇到同样的情况。如果模型不是默认模型,你可以在组件的“onDetach”方法中执行此操作。
    • @RobAu 不确定,但我认为您说错了。 LoadableDetachableModel 有抽象的 load 方法,它应该从数据库中检索数据。每次呈现页面时都会调用该方法,因为检索到的对象未存储在请求之间的内存中(即分离)。
    • load() 在模型分离时被调用。模型本身对它所在的页面一无所知。如果模型在组件中用作默认模型,则组件会在其 IModel 上调用 detach()。如果您创建的 LDM 不直接(或通过像 PropertyModel 这样的包装模型)在组件中使用,则永远不会调用 detach()。 modelObject 和 attach 布尔值是瞬态的,因此在序列化/反序列化时,附加状态将被“重置”,并且模型对象在下次调用 getObject() 时重新加载。
    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2013-06-02
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多