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

升级到Vaadin 8.14.2后ListSelect组件触发IllegalStateException异常

Vaadin 8.14.2 ListSelect 行数请求超限异常解决方案

你遇到的异常是Vaadin版本升级后触发的内置DoS防护规则,异常详情如下:

java.lang.IllegalStateException: Client tried fetch more rows than allowed. This is denied to prevent denial of service.
    at com.vaadin.data.provider.DataCommunicator.onRequestRows(DataCommunicator.java:311)
    at com.vaadin.data.provider.DataCommunicator$SimpleDataRequestRpc.requestRows(DataCommunicator.java:74)
    at jdk.internal.reflect.GeneratedMethodAccessor370.invoke(Unknown Source)

根因说明

Vaadin 从8.13.0版本开始,为了防止恶意请求拉取全量数据导致服务端资源耗尽,给数据通信层DataCommunicator增加了单次请求行数限制,默认阈值为1000行。升级到8.14.2后,如果你使用的ListSelect一次性加载超过1000条全量数据,就会触发该校验抛出异常。

可选用的解决方法

  • 自定义最大请求行数阈值
    确认业务场景下全量数据加载是安全的,可直接修改当前ListSelect实例的最大允许行数:
    // 数值根据业务实际最大数据量调整即可
    listSelect.getDataCommunicator().setMaxRowsFromClient(2000);
    
    如果需要全局生效所有组件,可在Vaadin的Servlet配置参数中添加如下配置:
    vaadin.dataCommunicator.maxRowsFromClient=2000
    
  • 优化数据加载逻辑
    数据量较大的场景下,不要将全量数据直接塞给ListSelect,改用CallbackDataProvider实现懒加载:仅在前端滚动到对应位置时,才请求对应分页的少量数据,从根源避免单次请求行数超限。
  • 调整组件高度配置
    检查是否给ListSelect设置了不合理的高度(比如设置为100%占满父容器,而父容器高度极大),这种情况会让前端判定所有数据都在可视区域内,直接请求全量数据。调整为合理的固定高度,让组件自带滚动效果,也可避免该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:03