Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wicket (无状态)模型和LoadableDetachableModel之间的区别_Wicket - Fatal编程技术网

Wicket (无状态)模型和LoadableDetachableModel之间的区别

Wicket (无状态)模型和LoadableDetachableModel之间的区别,wicket,Wicket,我看不到无状态模型和LoadableDetachableModel之间的区别。 假设我有: IModel<String>model=new Model<String>(){ @Override public String getObject() { return new Date().toString(); } }; IModel<String>model2=new

我看不到无状态模型和LoadableDetachableModel之间的区别。 假设我有:

    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存在的一个主要原因。对于简单的模型来说,这可能没有什么区别,但是如果您的模型做了一些更重的工作,比如从数据库加载数据,那么如果每个请求只执行一次或多次数据库查询,则会产生很大的区别。