使用FreeMarker模板渲染Map嵌套List的表格时报NonSequenceOrCollectionException如何解决
问题原因
- 服务层数据绑定错误:你构造了
List<MessageRequest>类型的messageRequests对象,但最终放入FreeMarker模板参数的是map自身,而非该列表:
// 错误写法 map.put("messages",map);
这导致模板中拿到的messages是HashMap类型(也就是异常提示的extended_hash),而非你预期的列表。
2. 模板遍历逻辑错误:你按照嵌套列表的写法写了两层<#list>,且第一层用了哈希遍历的key, value写法,和实际传入的数据类型不匹配。
3. 模板字段映射错误:原有表格第二列写了${item},会直接输出对象的toString结果,和表头字段不匹配。
修复步骤
第一步:修改服务层数据绑定逻辑
把sendEmail方法中参数赋值的代码修改为:
public MailResponse sendEmail() { List<MessageRequest> messageRequests = new ArrayList<>(); messageRequests.add(new MessageRequest("test id","test name","000001","covaxin","free","100" , DateUtil.getTodayDate())); MailRequest mailRequest = new MailRequest(); mailRequest.setFrom("electrode.1990@gmail.com"); mailRequest.setName("manjosh"); mailRequest.setToArr(new String[]{"email@gmail.com"}); mailRequest.setSubject("Test email from vaccine slot tracker app"); Map<String,Object> map = new HashMap<>(); // 修正:把列表放入参数,而非map自身 map.put("messages",messageRequests); // 无用代码可以直接删除 // map.put("test",map); return sendEmail(mailRequest,map); }
第二步:修改FreeMarker模板遍历逻辑
删除多余的双层遍历,直接遍历messages列表,同时修正字段映射:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Vaccine availability tracker</title> </head> <body> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="top" style="background-color: #F0F8FF;"><br> <br> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr class="tableHeader"> <td>Center Id</td> <td>Center name</td> <td>Area Pincode</td> <td>Vaccine</td> <td>Vaccine fee</td> <td>Available capacity</td> <td>Date</td> </tr> <!-- 修正:单层遍历列表即可 --> <#list messages as item> <tr class="tableBody"> <td>${item.centerId}</td> <td>${item.name}</td> <td>${item.pincode}</td> <td>${item.vaccine}</td> <td>${item.fee}</td> <td>${item.available_capacity}</td> <td>${item.date}</td> </tr> </#list> </table> <br> <br></td> </tr> </table> </body> </html>
内容的提问来源于stack exchange,提问作者manjosh
相关产品推荐
相关产品推荐

