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);
但我想只编辑一列。可以说地址应该是唯一可以编辑的列。
答案 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。