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

