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

Thymeleaf迭代状态变量surveyStat.last报错问题排查

问题原因与解决办法

核心原因

  • 问题根源是Spring Data JPA返回的Page对象size属性为null:
    • Thymeleaf迭代状态对象surveyStat的odd属性仅依赖当前迭代的索引值,不需要用到Page的size,因此能正常调用;
    • 但last属性需要结合Page的size和总记录数计算是否为最后一条数据,当size为null时,内部会触发空指针异常,进而抛出EL1021E错误。
  • 导致size为null的常见场景:
    • 分页查询时传入了无效的Pageable对象(比如空对象),或是自定义查询手动构建Page时,未设置size和totalElements参数;
    • 使用无参的Page.empty()创建空页,这种方式生成的Page对象不会初始化size属性。

解决办法

1. 修复后端分页查询逻辑

  • 确保调用Spring Data JPA分页方法时,传入完整的Pageable实例,示例:
    // 正确创建分页参数,指定页码和每页条数
    Pageable pageable = PageRequest.of(pageNum, pageSize);
    Page<Survey> surveys = surveyRepository.findAll(pageable);
    
  • 如果是自定义查询手动构建Page对象,必须完整初始化参数:
    List<Survey> surveyList = customSurveyDao.getSurveyList();
    long totalCount = customSurveyDao.getTotalCount();
    Pageable pageable = PageRequest.of(0, 10); // 按需设置分页参数
    Page<Survey> surveys = new PageImpl<>(surveyList, pageable, totalCount);
    
  • 空数据场景下,使用带参数的Page.empty(pageable)创建空页,而非无参版本:
    Page<Survey> emptySurveys = Page.empty(pageable);
    

2. 视图层增加防御性判断

在Thymeleaf中调用surveyStat.last前,先判断Page对象的有效性,避免触发异常:

<div th:if="${surveys != null and surveys.size != null}">
  <span th:text="${surveyStat.last}">是否为最后一条</span>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:35:09