【发布时间】:2013-08-29 05:45:19
【问题描述】:
我有一个 Map<Long, List<Map<String, Object>>> typeAndKno 的 HashMap,在 FreeMarker 页面中,我得到这个地图的内容是这样的:
<#list typeAndKno?keys as typeId>
${typeAndKno.get(typeId).get(0).get('TYPE_NAME')}
<#list typeAndKno.get(typeId) as kno>
${kno.get('KNOWLEDGE_ID')}
</#list>
</#list>
此代码在 Struts2 中运行良好,但移至 Spring MVC 后,代码失败。我终于把代码改成了这样:
<#list typeAndKno?keys as typeId>
${typeAndKno[typeId]?first['TYPE_NAME']}
<#list typeAndKno[typeId?string] as kno>
${kno['KNOWLEDGE_ID']}
</#list>
</#list>
这两段代码有什么区别?有没有办法让第一段代码在 Spring MVC 中工作?
【问题讨论】:
-
我猜是因为 OGNL。
-
@AleksandrM 我看不懂,OGNL 为它做了什么?
-
因为在您的第二个示例中,您使用的是 freemarker 内置插件。
-
@AleksandrM 也就是说,OGNL 做了一些方便使用 freemarker 的事情。我想知道如何使它像spring MVC中的struts 2一样方便
-
不同之处在于 FreeMarker
object_wrapper设置。 Spring下面的那个看起来更好(但不要写kno['KNOWLEDGE_ID']之类的,kno.KNOWLEDGE_ID更简洁)。只是,它真的有效吗?就像如果typeId很长,那么typeAndKno[typeId]不应该工作。
标签: spring struts2 freemarker