Java 如何使用AjaxLink更新Wicket Listview?
我想通过Ajax链接用新闻条目更新我的ListView。我有一个每个月的链接,点击后,我想显示特定月份的新闻 我尝试了本教程,但不起作用: 以下是我的代码示例:Java 如何使用AjaxLink更新Wicket Listview?,java,ajax,wicket,Java,Ajax,Wicket,我想通过Ajax链接用新闻条目更新我的ListView。我有一个每个月的链接,点击后,我想显示特定月份的新闻 我尝试了本教程,但不起作用: 以下是我的代码示例: add(new Label("title", "News Archive")); List<NewsEntry> newsEntries = new ArrayList<NewsEntry>(); final ListView<NewsEntry> listview =
add(new Label("title", "News Archive"));
List<NewsEntry> newsEntries = new ArrayList<NewsEntry>();
final ListView<NewsEntry> listview = new ListView<NewsEntry>(
"newsItem", newsEntries)
{
private static final long serialVersionUID = -4294698878214798680L;
@Override
protected void populateItem(final ListItem<NewsEntry> item)
{
Link<Void> link = new Link<Void>("newsItemLinkID")
{
private static final long serialVersionUID = 6176760893378172041L;
@Override
public void onClick()
{
setResponsePage(getPage());
}
};
link.add(new Label("newsItemLinkName", item.getModelObject()
.getHeadline()));
link.setOutputMarkupId(true);
item.add(link);
}
};
listview.setOutputMarkupId(true);
add(listview);
add(new AjaxLink<Object>("march")
{
private static final long serialVersionUID = 974013580329804810L;
@Override
public void onClick(AjaxRequestTarget target)
{
NewsDAO news = new NewsDAO();
listview.setList(news.getNewsFromMonth(MONTH.MARCH));
target.addChildren(listview, Link.class);
}
});
添加(新标签(“标题”、“新闻档案”);
列表新闻条目=新建ArrayList();
最终ListView ListView=新ListView(
“新闻项目”,新闻条目)
{
私有静态最终长serialVersionUID=-4294698878214798680L;
@凌驾
受保护的无效填充项(最终列表项)
{
Link Link=新链接(“newsItemLinkID”)
{
私有静态最终长serialVersionUID=6176760893378172041L;
@凌驾
公共void onClick()
{
setResponsePage(getPage());
}
};
添加(新标签(“newsItemLinkName”,item.getModelObject())
.getHeadline());
link.setOutputMarkupId(true);
添加(链接);
}
};
setOutputMarkupId(true);
添加(列表视图);
新增(新AjaxLink(“三月”)
{
私有静态最终长serialVersionUID=974013580329804810L;
@凌驾
公共void onClick(AjaxRequestTarget目标)
{
NewsDAO news=NewsDAO();
setList(news.getNewsFromMonth(MONTH.MARCH));
addChildren(listview,Link.class);
}
});
目前,不会显示任何内容。我没有收到任何错误,无论是在ajax调试窗口中,还是在我的eclipse控制台中。我现在有点卡住了,不知道出了什么问题。您应该将ListView包装到WebMarkupContainer中,并更新此容器而不是ListView
WebMarkupContainer wmc = new WebMarkupContainer("listWmc");
add(wmc);
// init your listView
// ...
wmc.add(listView);
对此有一点解释:如果您查看listview的生成标记,您将看到它不是一个HTML元素,而是几个(每个项目一个)。由于Wicket的Ajax模型是基于替换元素的,因此要更新它是有问题的。添加包装
WebMarkupContainer
并对其进行更新可以解决此问题。我正在尝试更新WebMarkupContainer的模型(CompoundPropertyModel)。在AjaxLink的onClick处理程序中,只需将WebMarkupContainer添加到AjaxRequestTarget->target.add(wmc)中;