0

我有一个由 CrudBeanItemContainer 支持的 vaadin 表:

CrudBeanItemContainer<MyBean> beanItemContainer = new CrudBeanItemContainer<MyBean>(
            MyBean.class, getTableFields());

for (MyBean bean : beanCollection) {
    beanItemContainer.addBean(bean);
}
table.setContainerDataSource(beanItemContainer);

MyBean 有 3 个字段:

public class ProcessInstanceVariable {  
private String name;
private Object value;
private VariableType variableType;
    ...
}

VariableType 存储值的类型:Integer、Date、String、Boolean 等。

我在表中列出了 MyBeans。我希望用户能够编辑表格上的值。为此,我需要在Value列中添加一个字段,根据 VariableType,它可以是 DateField、CheckBox 等。

我试过这个:

Collection<?> itemIds = getTable().getItemIds();
for (Object itemId : itemIds) {
    Item item = getTable().getItem(itemId);
    Property value = item.getItemProperty("value");
    MyBean myBean = (MyBean) itemId;
    Property property = getField(myBean);
    boolean isRemoved = item.removeItemProperty("value");
    boolean isAdded = item.addItemProperty("value", property);
}

getField 方法返回所需的字段(CheckBox、DateField...)。虽然isRemovedisAdded为真,但我没有看到表中的字段。

如何在 MyBean 中添加 VariableType 字段?

4

1 回答 1

3

试试generateCell():

table.addGeneratedColumn("ColumnName", new ColumnGenerator() {          
    @Override
    public Object generateCell(Table source, final Object itemId, Object columnId) {
        Class class = source.getItem(itemId).getItemProperty("variableType").getType();
        if (class == Boolean.class){
            CheckBox chk = new CheckBox(null);
            ...
            return chk;
        } else if (class == String.class){
            TextArea text = new TextArea(null);
            ...
            return text;
        }
    }
});
于 2013-05-21T11:40:32.277 回答