如何获取 Vaadin 8 网格列类型?
How to get Vaadin 8 grid column type?
我将 Vaadin 8 用于动态 bean 的表格数据表示。所以我必须在列上定义逻辑过滤器。
为此,我需要来自网格或列对象的列 数据类型。
有没有办法获取列的数据类型?
在 Vaadin 7 中我可以使用 container.getType(columnName)
在 Vaadin 8 data binding model 中,属性 类型未被 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
时得到列的类型。例如,如果列是 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;
});
我不确定是否有办法从样式生成器中获取它 "outside"。
我将 Vaadin 8 用于动态 bean 的表格数据表示。所以我必须在列上定义逻辑过滤器。
为此,我需要来自网格或列对象的列 数据类型。 有没有办法获取列的数据类型?
在 Vaadin 7 中我可以使用 container.getType(columnName)
在 Vaadin 8 data binding model 中,属性 类型未被 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
时得到列的类型。例如,如果列是 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;
});
我不确定是否有办法从样式生成器中获取它 "outside"。