wicket:如何组合CompoundPropertyModel和LoadableDetaccessableModel

wicket:如何组合CompoundPropertyModel和LoadableDetaccessableModel,wicket,wicket-1.5,wicket-1.6,Wicket,Wicket 1.5,Wicket 1.6,我想实现两个目标: 我希望我的模型在生命周期内每次从DB加载(对于每个请求,只有一个对DB的请求) 我希望我的模型被动态地附加到页面上,wicket将为我完成所有这些可编辑的绑定 为了实现这两个目标,我得出结论,我需要同时使用CompoundPropertyModel和LoadableDetachableModel 有人知道这是不是一个好方法吗 我应该做新的CompoundPropertyModel(myLoadableDetachableModel) 是的,你是对的,可以使用 new Comp

我想实现两个目标:

  • 我希望我的模型在生命周期内每次从DB加载(对于每个请求,只有一个对DB的请求)

  • 我希望我的模型被动态地附加到页面上,wicket将为我完成所有这些可编辑的绑定

  • 为了实现这两个目标,我得出结论,我需要同时使用
    CompoundPropertyModel
    LoadableDetachableModel

  • 有人知道这是不是一个好方法吗

  • 我应该做新的CompoundPropertyModel(myLoadableDetachableModel)


  • 是的,你是对的,可以使用

    new CompoundPropertyModel<T>(new LoadableDetachableModel<T> { ... })
    
    这将“目标”引用到对象或模型

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

    public T getObject()
    {
        if (target instanceof IModel)
        {
            return ((IModel<T>)target).getObject();
        }
        return (T)target;
    }
    
    private Object target;
    
    public ChainingModel(final Object modelObject)
    {
    ...
    target = modelObject;
    }
    
    public T getObject()
    {
        if (target instanceof IModel)
        {
            return ((IModel<T>)target).getObject();
        }
        return (T)target;
    }
    
    public void setObject(T object)
    {
        if (target instanceof IModel)
        {
            ((IModel<T>)target).setObject(object);
        }
        else
        {
            target = object;
        }
    }
    
    public void detach()
    {
        // Detach nested object if it's a detachable
        if (target instanceof IDetachable)
        {
            ((IDetachable)target).detach();
        }
    }