Java 从wicket中的列表模型制作项目模型

Java 从wicket中的列表模型制作项目模型,java,list,wicket,Java,List,Wicket,Wicket版本:6.14 我有一个 LoadableDetachableModel<List<Foo>> LoadableDetachableModel 我试图将模型与向导一起使用,但向导的每一页都将使用列表中的一项 我想获得列表中每个屏幕的模型,并在向导的每个屏幕之间更改模型 理想情况下,我可以这样做: PropertyModel<Foo> fooItemModel = new PropertyModel<Foo>(fooItems, "g

Wicket版本:6.14

我有一个

LoadableDetachableModel<List<Foo>>
LoadableDetachableModel
我试图将模型与向导一起使用,但向导的每一页都将使用列表中的一项

我想获得列表中每个屏幕的模型,并在向导的每个屏幕之间更改模型

理想情况下,我可以这样做:

PropertyModel<Foo> fooItemModel = new PropertyModel<Foo>(fooItems, "get(0)");
PropertyModel fooItemModel=新的PropertyModel(fooItems,“获取(0)”);
我还有一个想法,就是滚动我自己的ListItemModel,让它花上一段时间

IModel<List<?>>

IModel向导库已经存在,它比编写自己的向导库更容易实现。您应该看看Wicket的内置组件(带有源代码的示例),或者

我通过使自己的模型类似于ListItemModel并使用页面索引来确定从主模型中提取哪个模型,从而解决了这个问题

public class ElementModel<T> implements IModel<T>
{
    private static final long serialVersionUID = 1L;

    /** The list model */
    private IModel<List<T>> listModel;

    /** The list item's index */
    private final int index;

    /**
     * Construct
     * 
     * @param listModel
     *            The list model
     * @param index
     *            The index of this model
     */
    public ElementModel(final IModel<List<T>> listModel, final int index)
    {
        this.listModel = listModel;
        this.index = index;
    }

    /**
     * @see org.apache.wicket.model.IModel#getObject()
     */
    @Override
    public T getObject()
    {
        return listModel.getObject().get(index);
    }

    /**
     * @see org.apache.wicket.model.IModel#setObject(java.lang.Object)
     */
    @Override
    public void setObject(T object)
    {
        listModel.getObject().set(index, object);
    }

    /**
     * @see org.apache.wicket.model.IDetachable#detach()
     */
    @Override
    public void detach()
    {
        // Do nothing.
    }
}
public类ElementModel实现IModel
{
私有静态最终长serialVersionUID=1L;
/**列表模型*/
私有IModel列表模型;
/**列表项的索引*/
私有最终整数指数;
/**
*构造
* 
*@param listModel
*列表模型
*@param索引
*该模型的索引
*/
公共元素模型(最终IModel列表模型、最终int索引)
{
this.listModel=listModel;
这个指数=指数;
}
/**
*@see org.apache.wicket.model.IModel#getObject()
*/
@凌驾
公共T getObject()
{
返回listModel.getObject().get(索引);
}
/**
*@see org.apache.wicket.model.IModel#setObject(java.lang.Object)
*/
@凌驾
公共无效集合对象(T对象)
{
listModel.getObject().set(索引,对象);
}
/**
*@see org.apache.wicket.model.IDetachable#detach()
*/
@凌驾
公共图书馆
{
//什么也不做。
}
}

您想在列表中添加什么?只是简单的字符串、数字或对象?如果它们是对象,它们是否可以序列化?向导中的步骤数取决于我从数据库中检索的项目数,因此它是动态的。每个页面代表我模型中的一个项目,因此我需要一种方法来为向导中的单个步骤提取该项目。我在下面创建的ElementModel工作得非常好。我不是在尝试编写我自己的,而是在使用wicket的向导库“org.apache.wicket.extensions.wizard.wizard”
public class ElementModel<T> implements IModel<T>
{
    private static final long serialVersionUID = 1L;

    /** The list model */
    private IModel<List<T>> listModel;

    /** The list item's index */
    private final int index;

    /**
     * Construct
     * 
     * @param listModel
     *            The list model
     * @param index
     *            The index of this model
     */
    public ElementModel(final IModel<List<T>> listModel, final int index)
    {
        this.listModel = listModel;
        this.index = index;
    }

    /**
     * @see org.apache.wicket.model.IModel#getObject()
     */
    @Override
    public T getObject()
    {
        return listModel.getObject().get(index);
    }

    /**
     * @see org.apache.wicket.model.IModel#setObject(java.lang.Object)
     */
    @Override
    public void setObject(T object)
    {
        listModel.getObject().set(index, object);
    }

    /**
     * @see org.apache.wicket.model.IDetachable#detach()
     */
    @Override
    public void detach()
    {
        // Do nothing.
    }
}