前言
项目中使用的FreeMarker版本为2.3.30,在获取后端Map集合中的数据时,发现循环取出的Key值内包含Map集合本身的方法,希望大家在使用FreeMarker获取Map集合数据时避免这个问题。
一、问题详情
数据封装在一个Map集合中,key值是String类型,value是一个List集合。
使用ModelMap把数据交给视图控制器,进行前端页面生成。
最开始在模板中使用以下代码进行取值:
<#list map?keys as key>
${map[key]}
</#list>
发现页面上没有正确显示数据,在debug过程中,确认后台数据封装没问题,于是在前端页面上单独对Map集合的key值进行循环打印,如下图:
仅“sku2”和“sku430”是我所需要的key值,其他都是Map对象内自带的方法。
二、问题处理
为了明确告诉FreeMarker我要从Map集合中取什么值,在传递数据的时候,通过Map对象的keySet()方法将key值集合一并传递。
<#list keys as key>
<tr>
<td>${key}</td>
<#list result[key] as val>
<td>${val}</td>
</#list>
</tr>
</#list>
循环key值集合的时候,通过key值获取Map集合的value内容。
稳妥起见,最好对key值集合和Map集合中取出的值进行一次非Null判断