Vaadin 8 Grid Object类型列设置Renderer时getColumn返回null求助
Vaadin 8 Grid Object类型列格式化问题解决方法
问题根源
你调用grid.getColumn(entry.getKey())返回null的核心原因是:getColumn()方法的入参是列的唯一ID,你在调用addColumn()添加列的时候没有给列绑定对应的ID,所以无法通过key查询到对应列。
快速修复方案
只需要在添加列时补充setId(entry.getKey())绑定列ID即可:
grid.addColumn(h -> h.get(entry.getKey())) .setId(entry.getKey()) // 新增此行,将列ID和你的map key绑定 .setCaption(captn) .setStyleGenerator(item -> "v-align-right");
修复后你后续的getColumn()调用就能正常获取到列对象了。
更稳妥的完整可运行示例
推荐直接在添加列阶段就判断值类型配置对应的Renderer,不需要后续再查询列调整配置,降低出错概率:
import com.vaadin.ui.Grid; import com.vaadin.ui.renderers.NumberRenderer; import org.apache.commons.lang3.math.NumberUtils; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class DynamicObjectGridDemo { public Grid<LinkedHashMap<String, Object>> createDynamicGrid( List<LinkedHashMap<String, Object>> dataSource, Map<String, String> columnKeyToCaption ) { Grid<LinkedHashMap<String, Object>> grid = new Grid<>(); grid.setItems(dataSource); for (Map.Entry<String, String> columnConfig : columnKeyToCaption.entrySet()) { String columnKey = columnConfig.getKey(); String columnCaption = columnConfig.getValue(); // 样本值判断列类型,可根据业务需求调整空值、异常值处理逻辑 Object sampleVal = dataSource.isEmpty() ? null : dataSource.get(0).get(columnKey); boolean isNumberColumn = sampleVal != null && NumberUtils.isCreatable(sampleVal.toString()); if (isNumberColumn) { // 数字列配置右对齐+数字格式化渲染器 grid.addColumn(item -> { Object val = item.get(columnKey); return val instanceof Number ? (Number) val : null; }) .setId(columnKey) .setCaption(columnCaption) .setStyleGenerator(item -> "v-align-right") // 可根据需要调整格式串和Locale,比如欧洲格式可传入Locale.GERMANY .setRenderer(new NumberRenderer("###,###,###,##0.###")); } else { // 普通列默认文本渲染 grid.addColumn(item -> item.get(columnKey)) .setId(columnKey) .setCaption(columnCaption); } } return grid; } }
注意事项
- 数字格式串可按需调整:整数部分的逗号是千分位分隔符,小数部分的点是小数点,如果你需要反转分隔符可搭配Locale参数使用
- 若同一列可能存在混合类型值,建议在值提供者中加类型兼容处理,避免渲染阶段抛出类型转换异常
- 如果不需要后续通过ID操作列,可省略
setId()调用,所有配置在添加列时一次性完成即可
内容的提问来源于stack exchange,提问作者Chris Suen
相关产品推荐
相关产品推荐

