wicket自动刷新数据表缓存值

wicket自动刷新数据表缓存值,wicket,Wicket,我在面板内使用数据表,面板设置为每60秒自动刷新一次。面板有时似乎会提取未传递给对象的值。我正在使用PropertyColumn向数据表中添加列。有没有办法禁用wicket或数据表中的缓存 我有一个返回联系人列表的Web服务。此列表将传递给下面的所有面板 装入式接触面板 新的ContactPanel(ViewPanel.getContentPanelId(),getContactListModel()) public IModel getContactListModel(){ List list

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

我有一个返回联系人列表的Web服务。此列表将传递给下面的所有面板

装入式接触面板 新的ContactPanel(ViewPanel.getContentPanelId(),getContactListModel())

public IModel getContactListModel(){
List listofmodels=//从webservice调用获取列表
返回新的ListModel(listofmodels);
}
在ContactPanel中,我加载另一个名为AccordianPanel的面板

Accordian面板包含一个RepeatingView

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

DefaultDataTable的源是扩展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;
        } 
    };
}
这是ContactDataProvider中模型方法的代码

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

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

         @Override
        public Object getObject() {
                return object;
        } 
    };
}
@覆盖
公共IModel模型(最终联系人对象){
返回新的AbstractReadOnlyModel(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共对象getObject(){
返回对象;
} 
};
}

在这种情况下,应该将什么转换为LoadableDetachableModel。从webservice返回的数据或ContactDataProvider中的数据可能是从存储在内存中的模型加载数据。每次渲染组件时,应使用
LoadableDetachableModel
加载数据。不确定它是否回答了您的问题,因为您提供的详细信息太少,请显示一些代码。

但是您应该确保调用了“detach”;否则你也会陷入同样的境地。。如果模型不是默认模型,您可以在组件的“onDetach”方法中执行此操作。@RobAu不确定,但我认为您说错了什么
LoadableDetachableModel
具有抽象的
load
方法,该方法应该从数据库中检索数据。每次呈现页面时都会调用该方法,因为检索到的对象不会存储在请求之间的内存中(即分离)。分离模型时会调用load()。模型本身对它所在的页面一无所知。如果该模型用作组件中的默认模型,则该组件将在其IModel上调用detach()。如果创建的LDM未直接(或通过类似PropertyModel的包装器模型)在组件中使用,则永远不会调用detach()。modelObject和attach布尔值是暂时的,因此在序列化/反序列化时,附加状态将为“重置”,并且在下次调用getObject()时重新加载modelObject。
@Override
public IModel<Contact> model(final Contact object) {

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

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