Wicket 应该从IDataProvider.model()返回什么模型

Wicket 应该从IDataProvider.model()返回什么模型,wicket,Wicket,鉴于IDataProvider public interface IDataProvider<T> extends IDetachable { IModel<T> model(T object); } 公共接口IDataProvider扩展了IDetachable{ IModel模型(T对象); } 我应该在这里还什么型号?在javadoc中,有以下内容: 此数据提供程序的使用者使用回调将从#迭代器(int,int}检索到的对象包装为模型(通常是可分离的模型

鉴于IDataProvider

public interface IDataProvider<T> extends IDetachable {

    IModel<T> model(T object);
}
公共接口IDataProvider扩展了IDetachable{
IModel模型(T对象);
}
我应该在这里还什么型号?在javadoc中,有以下内容:

此数据提供程序的使用者使用回调将从#迭代器(int,int}检索到的对象包装为模型(通常是可分离的模型)


假设我有一个LoadableDetachableModel,它从数据库中加载对象列表。此模型是数据提供程序的输入。为什么我要再次将每个对象包装在可分离模型中?

对于不可序列化的对象,它应该是LDM-以便在后续请求时可以重新加载。对于可序列化对象,如果您不介意将对象存储在会话中

您提供的模型将可用于填充的行,因此当您在行上下文中工作时,例如,一些AJAX标签更新,您只需在渲染阶段从db加载单个对象,而不是整个列表


我通常的方法是直接加载实体并对其提供迭代器,而不在模型中包装它们。然后我在#model()中为实体提供包装LDM。

您说过LDM是数据提供程序的输入。在您的情况下,哪个对象处理分页


我们经常直接调用我们的服务来检索大小和对象。我们按照预期使用模型。加载一个对象。

我想我仍然不理解wicket模型的方法。当它序列化等时……如果我将LDM作为数据提供程序的输入,那么它将被分离。那么为什么我要关心单个行模型的LDM,它们是e从LDM获得。按照您的方法,当页面重新呈现时,它会从DB中逐个加载所有行模型。这非常慢,不是吗?当页面重新呈现时,IDataProvider会再次请求所有可用行。但是如果您单击行中的组件(例如,用于选择、删除、打开等),则只会加载单个行的模型e行被访问。基本上,您的方法是有效的,但是接口IDataProvider是为I/svenmeier描述的用例设计的。在这些用例中,模型被传播到行级别并存储在那里。