Thymeleaf嵌套遍历变量无法识别,报EL1007E错误求助
解决Thymeleaf嵌套循环EL1007E错误问题
问题分析
你遇到的EL1007E错误,本质是Thymeleaf解析表达式时,尝试访问一个null对象的orderProducts属性。注释内层循环后邮件能正常发送,说明外层的groupOrderCustomers列表本身没问题,问题出在内层循环对外层变量的引用逻辑,或是实体类的属性访问规范上。
解决方案
1. 确认实体类的Getter方法
Thymeleaf的EL表达式依赖JavaBean规范的getter方法,而非直接访问类字段。检查GroupOrderCustomer类是否存在以下方法:
public List<OrderProduct> getOrderProducts() { return orderProducts; }
如果缺失该方法,EL会无法识别orderProducts属性,直接抛出null相关错误。
2. 修正模板的嵌套循环写法
确保内层循环明确引用外层的循环变量,避免变量名冲突。比如将外层循环变量命名为customer,内层用product,消除引用歧义:
<table> <tr> <th>客户信息</th> <th>订单商品</th> </tr> <!-- 外层遍历客户列表 --> <tr th:each="customer : ${groupOrderCustomers}"> <td th:text="${customer.customerName}"></td> <td> <!-- 内层遍历当前客户的订单商品 --> <ul> <li th:each="product : ${customer.orderProducts}" th:text="${product.productName}"></li> </ul> </td> </tr> </table>
3. 添加非空判断避免空指针
若存在客户无订单商品的场景,需提前判断orderProducts是否为null或空列表,防止报错:
<td> <div th:if="${customer.orderProducts != null and not #lists.isEmpty(customer.orderProducts)}"> <ul> <li th:each="product : ${customer.orderProducts}" th:text="${product.productName}"></li> </ul> </div> <span th:else>无订单商品</span> </td>
4. 验证上下文变量的正确性
检查邮件上下文的变量设置代码,确保groupOrderCustomers是有效列表,且列表中每个GroupOrderCustomer实例的orderProducts已正确初始化(比如用空列表而非null):
// 示例代码,根据实际逻辑调整 List<GroupOrderCustomer> customerList = groupOrderService.getCustomerList(); // 初始化空的订单商品列表,避免null for (GroupOrderCustomer customer : customerList) { if (customer.getOrderProducts() == null) { customer.setOrderProducts(new ArrayList<>()); } } context.setVariable("groupOrderCustomers", customerList);
内容的提问来源于stack exchange,提问作者Martin Nordström
相关产品推荐
相关产品推荐

