gpt4 book ai didi

Wicket 口 :how to combine CompoundPropertyModel and LoadableDetachableModel

转载 作者:行者123 更新时间:2023-12-02 21:42:09 26 4
gpt4 key购买 nike

我想实现两个目标:

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

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

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

  1. 有人知道这是否是一个好方法?

  2. 我应该newCompoundPropertyModel(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 具有以下字段“目标”以及用于设置它的构造函数。

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/

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