是否可以重新排序已添加到Apache Wicket中的重复视图(更准确地说是ListView
)的项目?
我尝试在附件列表中对它们进行重新排序,如下面的代码所示,但这没有效果:
int indexA = itemList.indexOf(itemA);
int indexB = itemList.indexOf(itemB);
itemList.set(indexA, itemB);
itemList.set(indexB, itemA);
由于这没有效果,我尝试重置ListView
:
listView.setList(itemList);
当然我记得要为网页触发一个相应的重绘,但总而言之它没有效果。
在一些进一步的尝试中,我尝试将新项目添加到列表的末尾但是添加到开头:
itemList.add(0, newItem);
而不仅仅是
itemList.add(newItem);
虽然后一个工作(并且总是工作正常),但第一个显然适用于第一个项目,但会为第二个项目抛出异常。
Last cause: Unable to find component with id 'list-component' in [ListItem [Component id = 0]]
Expected: 'list-container:list-items:0:list-component'.
Found with similar names: 'list-container:list-items:1:list-component'
list-container
围绕WebMarkupContainer
的{{1}},ListView
是list-items
本身,ListView
是项目的ID加入。
那么,在将项目添加到重复视图后是否无法对项目进行重新排序?可以在最后添加新项目吗?或者我在这里遗漏了一些东西,可能是一个与实现这些特征的list-component
不同的类?
我的主要目标是能够重新排序项目,“在开始时添加” - 如果它至少可以从视图中删除项目并将它们重新添加到所需位置,那么这只是一个测试。
答案 0 :(得分:1)
已向上移动的链接'像这样工作,你可以用它作为灵感:)
public final Link<Void> moveUpLink(final String id, final ListItem<T> item)
{
return new Link<Void>(id)
{
private static final long serialVersionUID = 1L;
/**
* @see org.apache.wicket.markup.html.link.Link#onClick()
*/
@Override
public void onClick()
{
final int index = item.getIndex();
if (index != -1)
{
addStateChange();
// Swap items and invalidate listView
Collections.swap(getList(), index, index - 1);
ListView.this.removeAll();
}
}
@Override
public boolean isEnabled()
{
return item.getIndex() != 0;
}
};
}