我正在使用 Vaadin 8 进行动态 bean 的表格数据表示。所以我必须在列上定义逻辑过滤器。
为此,我需要来自网格或列对象的列数据类型。有没有办法获取列的数据类型?
在 Vaadin 7 中,我可以使用container.getType(columnName)
在Vaadin 8 数据绑定模型中,UI 组件(在您的情况下)不明确知道属性类型Grid
。此信息应来自您的域模型。
如果难以从您的域模型中检索,您可以执行以下操作:
// instead of new Grid(beanType)
PropertySet<YourBeanType> ps = BeanPropertySet.get(beanType);
Grid g = new Grid(ps);
...
// get the property type
// okay, this is ugly, but you get the idea
Class<?> type = ps.getProperty(yourPropertyName).get().getType();
在为列设置时,您可以获取列的类型styleGenerator
。例如,如果列是 a ,我会执行以下操作来设置特定样式BigDecimal
:
Grid.Column c = grid.getColumn("id");
c.setStyleGenerator(obj -> {
Object value = c.getValueProvider().apply(obj);
if (value instanceof BigDecimal) {
return "align-right";
}
return null;
});
我不确定是否有办法让它“在样式生成器之外”。