在wicket中从列表模型中创建项目的模型

时间:2014-07-28 19:05:58

标签: java list wicket

Wicket版本:6.14

我有一个

LoadableDetachableModel<List<Foo>>

我正在尝试使用带向导的模型,但向导的每个页面都将使用列表中的单个项目。

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

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

PropertyModel<Foo> fooItemModel = new PropertyModel<Foo>(fooItems, "get(0)");

我有另外一个想法是滚动我自己的ListItemModel并使其成为

IModel<List<?>>

而不是ListView。

public ListItemModel(final ListView<T> listView, final int index)
{
    this.listView = listView;
    this.index = index;
}

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

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

高级

赞赏任何建议

2 个答案:

答案 0 :(得分:1)

我通过使自己的模型类似于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.
    }
}

答案 1 :(得分:0)

已经存在的向导库更容易实现,而不是尝试编写自己的库。您应该查看Wicket的内置Wizard组件(包含来源here的示例)或JQuery's