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