如何获得Vaadin 8网格柱类型?

如何获得Vaadin 8网格柱类型?,vaadin,vaadin8,Vaadin,Vaadin8,我使用vaadin8来表示带有动态bean的表格数据。所以我必须在列上定义逻辑过滤器 为此,我需要来自网格或列对象的列数据类型。 有没有办法获取列的数据类型 在Vaadin 7中,我可以使用container.getType(columnName)在中,UI组件不明确知道属性类型(在您的示例中是网格)。此信息应来自您的域模型 如果难以从域模型中检索,可以执行以下操作: // instead of new Grid(beanType) PropertySet<YourBeanType>

我使用vaadin8来表示带有动态bean的表格数据。所以我必须在列上定义逻辑过滤器

为此,我需要来自网格或列对象的列数据类型。 有没有办法获取列的数据类型

在Vaadin 7中,我可以使用container.getType(columnName)

在中,UI组件不明确知道属性类型(在您的示例中是
网格
)。此信息应来自您的域模型

如果难以从域模型中检索,可以执行以下操作:

// 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();
//代替新网格(beanType)
PropertySet ps=BeanPropertySet.get(beanType);
网格g=新网格(ps);
...
//获取属性类型
//好吧,这很难看,但你明白了
Class type=ps.getProperty(yourPropertyName).get().getType();

设置列的
样式生成器时,可以获取列的类型。例如,如果列是
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;
 });

我不确定是否有办法让它“在”样式生成器之外

在本例中,您将获得实例的类型。虽然它聪明而且可能有用,但并不总是与bean的属性类型相同(尽管它可以从中赋值),这与其说是
获取者,不如说是
猜测者。