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

Vaadin 14中[Enter Key]回车键绑定触发异常问题求助

根因说明

该报错来自Vaadin Grid内置的键盘导航混入逻辑,按下回车键时,Grid会默认执行单元格导航逻辑,读取当前聚焦单元格所属行对象的_content属性。如果绑定的回车保存逻辑中,会提前修改Grid的状态(包括立即刷新数据源、隐藏Grid、移除当前选中行、销毁Grid实例),就会导致键盘事件后续链路执行时,对应的行对象已经被销毁变为undefined,触发属性读取异常。

可用修复方案
  • 方案1(最推荐):拦截Enter键的默认传播行为
    在Java侧给Grid组件添加Enter键监听器,先阻断Grid的原生键盘事件逻辑,再执行保存操作:

    grid.addKeyDownListener(Key.ENTER, event -> {
        event.preventDefault();
        event.stopPropagation();
        // 替换为你的页面数据保存逻辑
        savePageData();
    });
    

    该方案直接从事件链路层面阻断原生逻辑执行,不会影响Grid其他功能特性。

  • 方案2:延迟修改Grid状态的操作
    如果你的保存逻辑必须修改Grid状态,将修改Grid的操作放到事件循环的下一轮执行,等Grid原生键盘逻辑执行完毕再操作:

    grid.addKeyDownListener(Key.ENTER, event -> {
        savePageData();
        UI.getCurrent().access(() -> {
            // 替换为你的Grid状态修改逻辑,比如刷新数据源、隐藏Grid等
            grid.refreshAll();
        });
    });
    

    前端侧的修改逻辑可以用setTimeout(操作逻辑, 0)包裹实现延迟。

  • 方案3(非必要不推荐):关闭Grid键盘导航功能
    如果业务场景不需要Grid内置的键盘导航能力,可以直接关闭该特性规避报错:

    grid.getElement().setProperty("keyboardNavigation", false);
    

内容的提问来源于stack exchange,提问作者Prashant Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:36:01