当数据源是 SQLContainer 时如何使只有一列可编辑

How to make only one column editable when the datasource is a SQLContainer

    TableQuery tq1 = new TableQuery("employee", connectionPool);
    tq1.setVersionColumn("VERSION");
    employeeContainer = new SQLContainer(tq1);
    employeeTable = new Table();
    employeeTable.setContainerDataSource(employeeContainer);
    employeeTable.setVisibleColumns(new Object[]{
        "firstname", "lastname", "address"});
    employeeTable.setSelectable(true);
    employeeTable.setImmediate(true);

在那个例子中,我使用的是来自 Vaadin 的 SQLContainer-Addon。通过使用以下代码,我可以将所有单元格设置为可编辑。

employeeTable.setEditable(true);

但我只想让一栏可编辑。假设地址应该是唯一可以编辑的列。

还没有真正使用它来制作列 editable,但我猜你可以在其他 unedi 中使用自定义 ColumnGenerator 到 return TextFields table table。如果您 link TextField 的模型到底层容器,您甚至可以让它们在两个方向上相互更新。 (以下代码未经测试)

myTable.addGeneratedColumn("address", new Table.ColumnGenerator() {
    public Component generateCell(Table table, Object itemId, Object columnId) {
        BeanItem<MyBean> item = myContainer.getItem(itemId);
        Property<String> address = item.getItemProperty("address");
        TextField tf = new TextField();
        tf.setPropertyDataSource(address);
        return tf;
    }
}

注意:虽然这可能会更新容器模型,但我不确定这是否会有效地将更改提交到数据库,因为我不熟悉 SQLContainer。