在ApacheWicket';重复的观点
在ApacheWicket中,是否可以对添加到重复视图(更准确地说是在ApacheWicket';重复的观点,wicket,Wicket,在ApacheWicket中,是否可以对添加到重复视图(更准确地说是列表视图)中的项目重新排序 我尝试在附加列表中对它们重新排序,如以下代码所示,但没有效果: int indexA = itemList.indexOf(itemA); int indexB = itemList.indexOf(itemB); itemList.set(indexA, itemB); itemList.set(indexB, itemA); 由于这没有效果,我尝试重置列表视图的list属性: listView.
列表视图
)中的项目重新排序
我尝试在附加列表中对它们重新排序,如以下代码所示,但没有效果:
int indexA = itemList.indexOf(itemA);
int indexB = itemList.indexOf(itemB);
itemList.set(indexA, itemB);
itemList.set(indexB, itemA);
由于这没有效果,我尝试重置列表视图的list属性:
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
是围绕ListView
的WebMarkupContainer
,list items
是ListView
本身,list component
是要添加的项的id
那么,在将项目添加到重复视图后,是否无法对其重新排序?只能在末尾添加新项目吗?或者我在这里遗漏了什么,可能是实现这些特性的类不同于ListView
我的主要目标是能够对项目进行重新排序,“在开始时添加”方法只是一个测试,它至少可以从视图中删除项目并将其重新添加到所需位置。具有“上移”功能的链接是这样工作的,您可以将此作为灵感:)
公共最终链接移动上行(最终字符串id,最终列表项)
{
返回新链接(id)
{
私有静态最终长serialVersionUID=1L;
/**
*@see org.apache.wicket.markup.html.link.link#onClick()
*/
@凌驾
公共void onClick()
{
final int index=item.getIndex();
如果(索引!=-1)
{
addStateChange();
//交换项目并使listView无效
swap(getList(),index,index-1);
ListView.this.removeAll();
}
}
@凌驾
公共布尔值isEnabled()
{
返回项。getIndex()!=0;
}
};
}
您是否将列表直接传递到listview?还是你用了一个模型?如果使用模型,则如果刷新页面,视图将更新。顺便说一句,ListView有创建“上移”和“下移”链接的方法。我直接传递它,但正如我所述,这不是不刷新页面的问题,即使我按照上述方式重新排序列表中的项目,然后手动按F5,这些项目不会在网页上重新排序。移动项目的链接对我没有帮助,事件在别处触发。事实上,itemList.removeAll()
做到了这一点。我从来没想到会用那种方法,谢谢。
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;
}
};
}