Vaadin GridPro中自定义DatePicker组件取值始终为null如何解决
问题原因
addEditColumn方法传入的是格式化后的日期字符串,而非原始LocalDate类型值,GridPro无法完成自定义组件的初始值绑定- 共用了全局单个
DatePicker实例,GridPro每一行的编辑状态相互独立,单实例无法对应每一行的独立值存储 - 未配置自定义组件的初始值回填逻辑,也没有指定组件值提取规则,GridPro不知道如何从DatePicker获取选中值,因此
newValue和component.getValue()都会返回null
解决方案
调整配置逻辑,使用组件供应商生成独立实例,绑定原始日期属性,补充初始化和值读取规则,示例代码如下:
this.medicationAdjustmentRules.addEditColumn(MedicationAdjustmentRule::getValidUntil) // 配置非编辑状态的展示格式 .setRenderer(rule -> rule.getValidUntil() != null ? rule.getValidUntil().format(this.formatter) : null) // 配置自定义DatePicker编辑组件 .custom( // 每次打开编辑生成独立的DatePicker实例 DatePicker::new, // 编辑打开时回填当前行的日期值到组件 (datePicker, rule) -> datePicker.setValue(rule.getValidUntil()), // 编辑提交时将组件选中值更新到行对象 (rule, datePicker) -> rule.setValidUntil(datePicker.getValue()) ) .setHeader("validUntil");
如果使用低于Vaadin 23的旧版本,可使用以下适配写法:
final DatePicker component = new DatePicker(); this.medicationAdjustmentRules.addEditColumn(MedicationAdjustmentRule::getValidUntil) .setRenderer(rule -> rule.getValidUntil() != null ? rule.getValidUntil().format(this.formatter) : null) .custom( component, // 绑定值更新逻辑 (rule, newValue) -> rule.setValidUntil(newValue) ) // 显式指定组件值提取规则 .withValueProvider(component::getValue) .setHeader("validUntil");
内容的提问来源于stack exchange,提问作者Manuel Muggli
相关产品推荐
相关产品推荐

