当数据源是SQLContainer

时间:2016-06-16 10:06:26

标签: java sql datatable vaadin

    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);

但我想只编辑一列。可以说地址应该是唯一可以编辑的列。

1 个答案:

答案 0 :(得分:2)

还没有真正使用它来使列可编辑,但我想您可以使用自定义ColumnGenerator在其他不可编辑的表中返回TextField。如果将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;
    }
}

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