Wicket (无状态)模型和LoadableDetachableModel之间的区别
我看不到无状态模型和LoadableDetachableModel之间的区别。 假设我有:Wicket (无状态)模型和LoadableDetachableModel之间的区别,wicket,Wicket,我看不到无状态模型和LoadableDetachableModel之间的区别。 假设我有: IModel<String>model=new Model<String>(){ @Override public String getObject() { return new Date().toString(); } }; IModel<String>model2=new
IModel<String>model=new Model<String>(){
@Override
public String getObject() {
return new Date().toString();
}
};
IModel<String>model2=new LoadableDetachableModel<String>() {
@Override
protected String load() {
return new Date().toString();
}
};
Label label = new Label("label",model);
add(label);
Label label2 = new Label("label2",model2);
add(label2);
IModelmodel=新模型(){
@凌驾
公共字符串getObject(){
返回新日期().toString();
}
};
IModelmodel2=新的LoadableDetachableModel(){
@凌驾
受保护的字符串加载(){
返回新日期().toString();
}
};
标签=新标签(“标签”,型号);
添加(标签);
标签label2=新标签(“label2”,型号2);
添加(标签2);
第一个模型是无状态的,因此没有序列化任何内容。第二个LoadableDetachableModel具有状态,该状态设置为load()
的结果,但它是瞬态的,因此也不会序列化
为什么存在LoadableDetachableModel?一个无状态的模型是可以的,还是不可以?我认为两者都是请求范围。是的,您的两种型号在请求后都不会保持任何状态
但是您的第一个模型的
getObject()
将被多次调用,而LoadableDetachableModel
是请求范围,即load()
仅在每个请求中调用一次。我明白了。LoadableDetachableModels中的state
属性注意只调用一次load
。因此,您必须记住第一次调用的结果,这就是LoadableDetachableModels具有状态的原因:transientModelObject
(以及state
)属性。这就是LoadableDetachableModel存在的原因:注意getObject
中的实际工作只完成一次(通过load
),这当然是LoadableDetachableModel存在的一个主要原因。对于简单的模型来说,这可能没有什么区别,但是如果您的模型做了一些更重的工作,比如从数据库加载数据,那么如果每个请求只执行一次或多次数据库查询,则会产生很大的区别。