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);
}
高级
赞赏任何建议答案 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)