freemarker如何遍历Map<String,Map<String,Integer>> ?

千斤难买春秋醉 发布于 2014/11/27 16:03
阅读 1K+
收藏 0

这样竟然不好用。。。  

<#list stationStationFailureMap?keys as key>

      <#list stationStationFailureMap[key]?keys as k>
      ${(stationStationFailureMap[key])[k]}
      </#list>

  </#list>


直接这样可以出来东西,但是想得到stationStationFailureMapOfAll.get("key")就不好用了

<#assign stationStationFailureMapOfAll = stationStationFailureMap["all"]>
  <#list stationStationFailureMapOfAll?keys as stationStation>
    <td>${stationStation}</td>

        <#--<#assign values = stationStationFailureMapOfAll["武昌-苏州"]>
      <td>${values}</td>-->


  </#list>

貌似freemarker把stationStationFailureMapOfAll当成了一个普通对象而不是map来处理。

如何解决?

本来是用velocity的,没有这个问题。但velocity 保留两位小数,百分比啥的太难用了。

换成freemarker没想到出了这种问题。

加载中
1
千斤难买春秋醉
千斤难买春秋醉

@JFinal 詹总,问题解决了。

不知道是不是freemarker的bug,我的里面的那个map是TreeMap类型,就不行。

换成HashMap就可以。

后来试了试,LinkedHashMap就可以。不知道freemarker做了什么处理。

只好采用了折中的办法,把TreeMap转成LinkedHashMap(因为我需要有序)

自己结贴了。

<#list stationStationFailureMap['all']?keys as key>
${key}
${stationStationFailureMap['all'][key]}
</#list>
这样就可以。

貌似是freemarker 不支持TreeMap

0
JFinal
JFinal

别用赋值语句,直接读取变量试试:

<#list stationStationFailureMap["all"]?keys as stationStation>

在赋值的过程中或许会丢失类型信息,避免赋值试试

JFinal
JFinal
回复 @千斤难买春秋醉 : 你可以 freemarker 与 velocity 混合使用,只需在后端 renderVelocity(....)
千斤难买春秋醉
千斤难买春秋醉
回复 @JFinal : 不行我就换回velocity 代码里计算出百分比保留两位小数了
千斤难买春秋醉
千斤难买春秋醉
回复 @JFinal : <#list stationStationFailureMap.keySet() as k> 这样直接报错了。freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: ==> stationStationFailureMap.keySet
千斤难买春秋醉
千斤难买春秋醉
这样我试过,${stationStation]可以出来,但是${stationStationFailureMap["all"][stationStation]}出不来。
返回顶部
顶部