gpt4 book ai didi

Wicket 口 :how to combine CompoundPropertyModel and LoadableDetachableModel

转载 作者:行者123 更新时间:2023-12-02 04:43:58 25 4
gpt4 key购买 nike

我想实现两个目标:

  1. 我希望我的模型在生命周期中每次都从数据库中加载(对于每个请求,只有一个对数据库的请求)

  2. 我希望我的模型动态地附加到页面,并且 wicket 将为我完成所有这些可绑定(bind)

为了实现这两个目标,我得出的结论是我需要同时使用 CompoundPropertyModelLoadableDetachableModel

  1. 有谁知道这是不是一个好方法?

  2. 我应该new CompoundPropertyModel(myLoadableDetachableModel)吗?

最佳答案

是的,你没看错,可以用

new CompoundPropertyModel<T>(new LoadableDetachableModel<T> { ... })

或使用静态创建(效果相同):

CompoundPropertyModel.of(new LoadableDetachableModel<T> { ... })

兼具复合模型和惰性可拆卸模型的特点。分离也能正常工作,当分离 CompoudPropertyModel 时,它还会代理分离到在这种情况下用作模型对象的内部模型。

我在很多情况下都使用它并且效果很好。

解释:查看 CompoundPropertyModel 类的外观(我现在正在谈论 Wicket 1.6):

public class CompoundPropertyModel<T> extends ChainingModel<T>

这意味着,CompoundPropertyModel 将属性表达式行为添加到 ChainingModel。

ChainingModel 具有以下字段“target”和设置它的构造函数。

private Object target;

public ChainingModel(final Object modelObject)
{
...
target = modelObject;
}

这将“目标”引用指向对象或模型。

当您调用 getObject() 时,如果目标是 IModel 的子类,它会检查目标并代理功能:

public T getObject()
{
if (target instanceof IModel)
{
return ((IModel<T>)target).getObject();
}
return (T)target;
}

setObject(T) 实现了类似的功能,如果目标是 IModel 的子类,它也会设置目标或代理它

public void setObject(T object)
{
if (target instanceof IModel)
{
((IModel<T>)target).setObject(object);
}
else
{
target = object;
}
}

同样的方法用于分离对象,但是它检查目标(模型对象)是否可分离,换句话说,如果目标是 IDetachable 的子类,那么任何 IModel 确实是。

public void detach()
{
// Detach nested object if it's a detachable
if (target instanceof IDetachable)
{
((IDetachable)target).detach();
}
}

关于 Wicket 口 :how to combine CompoundPropertyModel and LoadableDetachableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20193590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com