在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.

在ApacheWicket中,是否可以对添加到重复视图(更准确地说是
列表视图
)中的项目重新排序

我尝试在附加列表中对它们重新排序,如以下代码所示,但没有效果:

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;
            }
        };
    }