【问题标题】:How to respond to click on a table row in vaadin如何响应在 vaadin 中单击表格行
【发布时间】:2013-01-18 11:14:12
【问题描述】:

我有以下代码:

public Button getBtnSubmit(com.vaadin.ui.Button.ClickListener l) {
    if (null != l) {
        btnSubmit.addListener(l);
    }
    return btnSubmit;
}

public Table getTableCompany(HeaderClickListener hl) {
    if (null != hl) {
        tableCompany.addListener(hl);
    }
    return tableCompany;
}

我想添加一个listener,当我在表格中选择一个(不同的)行时会触发它。
这样我就可以用表数据刷新一些其他控件,我应该使用哪个监听器?

【问题讨论】:

    标签: java vaadin


    【解决方案1】:

    addListener 现在已弃用。请改用以下内容。

    table.addItemClickListener(new ItemClickEvent.ItemClickListener() {
        @Override
        public void itemClick(ItemClickEvent itemClickEvent) {
            System.out.println(itemClickEvent.getItemId().toString());
        }
    });
    

    【讨论】:

      【解决方案2】:

      我会选择ItemClickListener:

       table.addListener(new ItemClickEvent.ItemClickListener() {
      
                  @Override
                  public void itemClick(ItemClickEvent event) {
                     //implement your logic here
                  }
              });
      

      编辑:对于 Vaadin 7+,使用 addItemClickListener 方法而不是 addListener

      【讨论】:

      • 如果你想得到点击的行的id然后Integer value = (Integer) event.getItem().getItemProperty("id").getValue();
      • event.getItemId() 呢?
      • 我相信itemId和id不一样,我说的是一个隐藏的列,它的值是用于后端处理的。
      • 现在已弃用 ib Vaadin 7,Ishan Thilina Somasiri 的答案是正确的
      【解决方案3】:

      你想添加一个ValueChangeListener

      【讨论】:

        【解决方案4】:

        如果你使用 ValueChangeListener 不要忘记设置

          table.setImmediate(true);
        

        这意味着浏览器将立即报告选择的更改。如果你不设置这个,你的监听器不会被调用。

        【讨论】:

          【解决方案5】:

          阅读https://vaadin.com/book/-/page/components.table.html,第 5.15.1 节“选择表中的项目”。你想add a Property.ValueChangeListener

          【讨论】:

            【解决方案6】:

            其中许多答案既正确又不正确。

            如果需要获取选中项来响应点击,注册一个ValueChangeListener。调用 getValue() 以从 ItemClickListener 中检索选择可能是 MultiSelect 列表中的 1 项。例如,项目集不会包含/排除触发回调的项目。但是,您不会引用单击的项目。

            如果您只是想响应对项目的点击,并且不需要考虑当前的选择状态,请注册一个 ItemClickListener。这样您就可以知道实际点击了哪个项目。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-04-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-11-28
              • 2013-05-13
              相关资源
              最近更新 更多