1

我想使用 Wicket 在我的屏幕上显示一个大列表。

该列表包含Panel具有大量 ajax/js 功能的 s。该列表往往会变长,因此我设置了一些限制,仅显示前 10 个条目。要获得更多条目,用户必须按下“更多”链接。

但是,这些项目位于ListView(可以是任何中继器)中。如果我想向转发器添加项目,Wicket 会强制我将转发器添加到 AjaxRequestTarget。这个结果是浏览器中转发器的完整重绘

我想防止这种情况。我想我可以通过完全从 jQuery / javascript 来做到这一点;通过要求将新的 10 个条目呈现在一个不可见的 div 中,然后将它们添加到我的列表中。这似乎很不邪恶。

任何人都可以提出更好的方法吗?

4

2 回答 2

1

我遇到了同样的问题,并且只能用 wicket 解决它:制作一个派生自GenericPanel(或只是Panel)的类,其中包含:

  • IModel<Long> currentOffsetModel
  • ListView
  • AjaxLink
  • div(或任何其他占位符元素)为WebmarkupContainer
  • LoadalbeDetechable 模型以从 currentOffsetModel 开始加载 ListView 的列表

在 AjaxLink-onClick方法中,您需要将占位符 div 替换为自定义类的新对象(“replaceWith”),将 AjaxLink 可见性设置为 false,将 AjaxLink 和新对象设置为 AjaxRequestTarget:

class EndlessListPanel extends Panel {

    WebmarkupContainer placeholder = new WebmarkupContainer("placeholder");

    ...

    AjaxLink<Void> nextListElem = new AjaxLink<Void>("next") {

        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            int offset = offsetModel.getObject().intValue();
            EndlessListPanel next = new NewsPanelList("placeholder",offset + 5);
            placeholder.replaceWith(next);
            setVisibilityAllowed(false);
            target.add(this, next );
        }

        @Override
        protected void onConfigure() {
            // The "if" prevents "previous" EndlessListPanel to query the LDM.
            if (isVisibilityAllowed()) {
                setVisibilityAllowed(!listing.getObject().isReachedEnd());
            }
            super.onConfigure();
        }
    };

    ...
}

对应的html:

<检票口:面板>

<wicket:container wicket:id="listItem"/>

<a wicket:id="next">下一个</a>

<div wicket:id="placeholder"></div>

</wicket:面板>
于 2013-09-17T12:13:02.997 回答
0

为什么不使用 aPageableListView和 a PagingNavigator?这似乎正是你想要的。

于 2013-09-18T08:24:31.410 回答