3

我有一个表,其数据源设置为 IndexedContainer。我的表上也启用了多项选择。问题是,我如何获得所有选定的值......也许是一个数组?

我的索引容器:

private void populateAnalyteTable () {

        Analyte[] analytes = Analyte.getAnalytes();

        for (Analyte analyte : analytes) {

            Object id = ic_analytes.addItem();
            ic_analytes.getContainerProperty(id, "ID").setValue(analyte.getId());
            ic_analytes.getContainerProperty(id, "Analyte Name").setValue(analyte.getAnalyteName());

        }

        // Bind indexed container to table
        tbl_analytes.setContainerDataSource(ic_analytes);

    }

我最终想要得到的是一组 Analyte 对象

4

4 回答 4

4

为什么要使用 IndexContainer?为什么不使用 BeanItemCotainer?请在下面找到代码片段

table.setMultiSelect(true);
BeanItemContainer<Analyte> container = new BeanItemContainer<Analyte>(Analyte.class);
container.addAll(Arrays.asList(Analyte.getAnalytes()));
table.setContainerDatasource(container);
// Add some Properties of Analyte class that you want to be shown to user
table.setVisibleColumns(new Object[]{"ID","Analyte Name"});


//User selects Multiple Values, mind you this is an Unmodifiable Collection
Set<Analyte> selectedValues = (Set<Analyte>)table.getValue();

如果它不能解决问题,请告诉我

于 2014-11-18T05:37:32.573 回答
1

支持 MultiSelect 的 vaadin 对象都返回一组选定项。

https://www.vaadin.com/api/com/vaadin/ui/AbstractSelect.html#getValue%28%29

这样做的缺点是,如果您需要以“真实”顺序(如屏幕上显示的那样)选择项目,则必须从 Set 到 Container 中找到它们

于 2014-11-14T17:54:14.020 回答
0

只需将您的对象添加为 Item-ID,就像 luuksen 已经提出的那样。只需将 yout IndexedContainer 的初始化更改为:

    for (Analyte analyte : analytes) {

        Object id = ic_analytes.addItem(analyte);
        ic_analytes.getContainerProperty(id, "ID").setValue(analyte.getId());
        ic_analytes.getContainerProperty(id, "Analyte Name").setValue(analyte.getAnalyteName());

    }
于 2014-11-19T13:37:07.210 回答
0

table.getValue()就是你要找的。此方法为您提供Object(如果表是单选)或Set<Object>(如果多选)所选项目的 ID。运行时类型取决于运行时 id 类型,但如果您不需要该值,您可以使用Object. 如果您正在寻找作为阵列的分析物,您可以这样做

@SuppressWarnings("unchecked")
Set<Object> selectedIds = (Set<Object>) tbl_analytes.getValue();
List<Analyte> listAnalytes = new ArrayList<Analyte>(); 
for (Object id : selectedIds) {
    listAnalytes.get(tbl_analytes.getItem(id));
}
listAnalytes.toArray();

请注意,此方法适用于您可能在 Vaadin 中使用的每个标准容器。问候!

编辑:实际上 .getValue() 返回的内容取决于使用的容器。在大多数情况下,它是 ID。

于 2014-11-21T07:38:27.513 回答