重新排序Apache Wicket重复视图中的项目

时间:2014-03-21 08:12:51

标签: wicket

是否可以重新排序已添加到Apache Wicket中的重复视图(更准确地说是ListView)的项目?

我尝试在附件列表中对它们进行重新排序,如下面的代码所示,但这没有效果:

int indexA = itemList.indexOf(itemA);
int indexB = itemList.indexOf(itemB);
itemList.set(indexA, itemB);
itemList.set(indexB, itemA);

由于这没有效果,我尝试重置ListView

的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围绕WebMarkupContainer的{​​{1}},ListViewlist-items本身,ListView是项目的ID加入。

那么,在将项目添加到重复视图后是否无法对项目进行重新排序?可以在最后添加新项目吗?或者我在这里遗漏了一些东西,可能是一个与实现这些特征的list-component不同的类?

我的主要目标是能够重新排序项目,“在开始时添加” - 如果它至少可以从视图中删除项目并将它们重新添加到所需位置,那么这只是一个测试。

1 个答案:

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