我有以下类:
public class Group {
private long id;
private String name;
...
private List<Person> members;
}
public class Person {
private long id;
private String name;
private String comments;
}
我有以下检票口面板:
<wicket:panel>
<div>
<!-- Group data -->
</div>
<form wicket:id="group">
<table>
<tbody wicket:id="container">
<tr wicket:id="members">
<td wicket:id="personId"></td>
<td wicket:id="name"></td>
<td><input type="text" name="comments" wicket:id="comments" value="" /></td>
</tr>
</tbody>
</table>
<input type="submit" value="save" >
</form>
</wicket:panel>
另一方面,我有一个具有过滤功能的网页,并向我展示了不同的组:
<html>
<body>
<form wicket:id="filterOptions">
<!-- filter options -->
</form>
<div wicket:id="resultingGroups">
<!-- contains the groups that matching the filters -->
</div>
</body>
</html>
我想更新执行 ajax 提交的组。我尝试使用 ListView,但是,我不知道为什么,当我单击"保存"按钮时,更改会反映在第一个组面板中,如果我更新任何其他组并单击"保存",则组对象不会更新。
我研究了很多,发现ListView对于我想做的事情来说不是一个好的选择,但我不知道哪个视图是正确的。
过滤器表单也适用于ajax按钮,并且工作正常。
我对检票口很陌生。
提前感谢!!
实际上,ListView,DataView和其他中继器非常适合您想要做的事情。
- ListView 应由具有所需项集合的模型填充
列表模型人员模型 =//...DAO 访问(数据库) ListView peopleList = new ListView("resultingGroups", peopleModel){ ... };
- 为了重新绘制(刷新列表视图),您应该将
peopleList
包含在带有.setOutputMarkupId(true);
的容器中(以便 Wicket 能够通过 ajax 找到该容器)。
... WebMarkupContainer peopleContainer = new WebMarkupContainer("container"); peopleContainer.setOutputMarkupId(true); peopleContainer.add(peopleList);...
- 。然后,每当您想要刷新列表中显示的结果时,您需要将新结果设置为模型 (
peopleModel
) 并重新绘制具有 ListView 的容器 ((*)
)
public void onEvent(AjaxRequestTarget target) { //...在按钮单击或其他东西时 新人列表 =//...道 peopleModel.setObject(newPeopleList); target.add(peopleContainer);(*) 重绘}
希望有帮助。更多例子在这里
https://cwiki.apache.org/WICKET/how-to-repaint-a-listview-via-ajax.html
检查 https://github.com/vineetsemwal/quickview/wiki