Wicket:在AjaxRequestTarget中不使用Repeater动态添加内容

时间:2013-09-16 12:03:22

标签: jquery ajax wicket repeater wicket-6

我希望在屏幕上使用Wicket提供大量列表。

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

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

我想阻止这一点。我想我可以通过jQuery / javascript完全做到这一点;通过要求新的10个条目在一个不可见的div中呈现,然后将它们添加到我的列表中。这看起来非常邪恶。

有人能提出更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

  • IModel<Long> currentOffsetModel
  • ListView
  • AjaxLink
  • div(或任何其他占位符元素)清空为WebmarkupContainer
  • LoadalbeDetechable Model从currentOffsetModel开始加载ListView的List

在AjaxLink - onClick方法中,您需要替换占位符div 使用自定义类的新Object(“replaceWith”),将AjaxLink可见性设置为false和 AjaxLink和新的Object to 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:panel>

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

<a wicket:id="next">Next</a>

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

</wicket:panel>

答案 1 :(得分:0)

为什么不使用PageableListViewPagingNavigator?这似乎完全符合您的要求。