特定 table 列的 Vaadin ValueChangeEvent getProperty

Vaadin ValueChangeEvent getProperty for a specific table column

我正在使用 Vaadin 和 MySQL 数据库。我将我的数据库(只有一列)的 table 可视化为 Table 并且我想单击 table 行并在单击单个时检索特定列的值行。

//Database Connection Class
...
private SQLContainer catExtractionContent = null;
FreeformQuery catExtractionQuery = new FreeformQuery("Select name as HAUPTKATEGORIE from Category where cat_main is null", connectionPool);
catExtractionContent = new SQLContainer(catExtractionQuery);

//UI-Class
private Object mainCatname=null;
mainCatTable = new Table();
mainCatTable.setContainerDataSource(getDBConn().getcatExtractionContent()); //This retrieves the SQL Container from obove
mainCatTable.addListener(new ValueChangeListener() { 
        
        public void valueChange(ValueChangeEvent event) {
         mainCatname = event.getProperty().getValue();
         System.out.println(mainCatname);
        }
});

我的 Table 包含类别名称。

当我在浏览器中单击 Table 的第一行、第二行和第三行时,System.out.println 打印 1,2,3...。

如何获取“名称”/“HAUPTKATEGORIE”列?

我尝试了一整天,但没有成功。

您必须从容器属性中读取列的内容。为此,您需要 propertyId。在你的情况下可能 "name" 或 "HAUPTKATEGORIE"。我不确定 SQLContainer 是如何工作的。

mainCatTable.addValueChangeListener(new ValueChangeListener() {

    @Override
    public void valueChange(ValueChangeEvent event) {

        Property<Table> p = event.getProperty(); //property of valuechangeevent in this case the Table instance
        Object itemId = p.getValue(); //selected item in table. also known as "itemId"

        Property<?> containerPropertyName = mainCatTable.getContainerProperty(itemId, "HAUPTKATEGORIE");
        System.out.println("HAUPTKATEGORIE : " + containerPropertyName.getValue());

    }
});