Wicket Listview按钮onclick调用每个项目

时间:2015-08-22 05:45:29

标签: listview onclick wicket

我跟着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的图片,如果有帮助的话。按钮以红色标出。

2 个答案:

答案 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附加到项目中,它将仅提交其子组件的数据。