我跟着this post将单击功能添加到ListItem中的按钮,但由于某种原因提交表单(点击按钮)时,按钮单击发生在每个项目而不是单击的个人。我可以通过将onClick添加到项目本身来获得首选结果,但我宁愿将点击注册到项目中的按钮。如何对仅影响项目的按钮实现单击操作?
ListView<Games> gamesList = new ListView<Games>("gamesList", games) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(final ListItem<Games> item) {
Form<?> form = new Form<>("exportForm");
final SpecialButton exportButton = new SpecialButton("exportButton", item);
form.add(exportButton);
...
item.add(form);
}
}
private class SpecialButton extends AjaxButton {
final ListItem<Games> item;
public SpecialButton(final String id, final ListItem<Games> item) {
super(id);
this.item = item;
}
@Override
protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
// here you cand do everything you want with the item and the model object of the item.(row)
Games game = item.getModelObject();
System.out.println("Calling file generation with match id: " + game.getGameId()
+ " summoner id: " + game.getSummonerId()
+ " enemy name: " + game.getEnemyChampName());
}
}
Here是listview的图片,如果有帮助的话。按钮以红色标出。
答案 0 :(得分:1)
你真的需要这个表格吗?从你的代码我假设你只需要在这个过程中的游戏对象?为什么不使用简单的AjaxLink
:
item.add(new AjaxLink<Games>("exportButton", item.getModel()) {
public void onClick(AjaxRequestTarget target) {
// generate export
}
});
答案 1 :(得分:0)
“提交”按钮提交整个表单,即表单中的所有项目都将更新。无论你有多少提交按钮 - 他们都会这样做。
使用https://issues.apache.org/jira/browse/WICKET-5948(6.21.0+&amp; 7.1.0+),可以将AjaxFormComponentUpdatingBehavior附加到项目中,它将仅提交其子组件的数据。