You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:54:02