Wicket 是一个基于组件的 Java Web 框架,它提供了强大的 Ajax 支持。ListView 是 Wicket 中用于显示重复数据的组件,而通过 Ajax 实现动态添加和删除项可以提升用户体验。
首先创建一个包含 ListView 的页面:
public class AjaxListViewPage extends WebPage {
private List<String> items = new ArrayList<>(Arrays.asList("Item 1", "Item 2", "Item 3"));
public AjaxListViewPage() {
// 页面初始化代码
}
}
public class AjaxListViewPage extends WebPage {
private List<String> items = new ArrayList<>(Arrays.asList("Item 1", "Item 2", "Item 3"));
public AjaxListViewPage() {
ListView<String> listView = new ListView<String>("listView", items) {
@Override
protected void populateItem(ListItem<String> item) {
item.add(new Label("itemLabel", item.getModel()));
// 添加删除按钮
item.add(new AjaxLink<Void>("deleteLink") {
@Override
public void onClick(AjaxRequestTarget target) {
items.remove(item.getModelObject());
target.add(listView);
}
});
}
};
listView.setOutputMarkupId(true);
add(listView);
// 添加新增项的按钮
add(new AjaxLink<Void>("addLink") {
@Override
public void onClick(AjaxRequestTarget target) {
items.add("Item " + (items.size() + 1));
target.add(listView);
}
});
}
}
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<head>
<meta charset="UTF-8">
<title>Ajax ListView Example</title>
</head>
<body>
<div wicket:id="listView">
<div>
<span wicket:id="itemLabel"></span>
<a href="#" wicket:id="deleteLink">[Delete]</a>
</div>
</div>
<a href="#" wicket:id="addLink">[Add Item]</a>
</body>
</html>
IModel<List<String>> listModel = new LoadableDetachableModel<List<String>>() {
@Override
protected List<String> load() {
return items;
}
};
item.add(new AjaxLink<Void>("deleteLink") {
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
attributes.getAjaxCallListeners().add(new ConfirmAjaxCallListener("Are you sure?"));
}
@Override
public void onClick(AjaxRequestTarget target) {
items.remove(item.getModelObject());
target.add(listView);
}
});
target.add(listView)
setOutputMarkupId(true)
是否设置DataView
或 PageableListView
AbstractAjaxBehavior
进行部分更新这种实现方式避免了页面刷新,提供了流畅的用户体验,同时保持了 Wicket 的组件化优势。
没有搜到相关的文章