如何在freemarker中读取对

时间:2013-11-07 17:00:43

标签: freemarker

我对阅读配对没什么问题。

所以我正在创造我的一对

private Pair<Integer, Integer> count(somethink) {
    int c1 = 2;
    int c2 = 4;
    return new Pair<Integer, Integer>(c1, c2);

}

并通过java'发送'到ftl

mv.addObject("counted", count(somethink));

我不会写出它发送的所有内容,因为我认为这对我的问题不重要。所以我在“ftl”中收到它。然后我试着'读'它。

<#list counted?keys as key> 
    <a href="#offerOrderTab"><@spring.message "someMsg"/>(${key}/${counted[key]})</a>
</#list> 

之后我收到错误

Expecting a string, date or number here, Expression x is instead a freemarker.ext.beans.SimpleMethodModel

正如我想你没有迭代对(或者我错了?)我知道它只包含一个键和一个值,但我仍然必须这样发送它,我认为它将是类似的迭代遍历map,在Java中我会使用pair.first()和pair.second()但它在ftl中不起作用(是的,我知道它不应该工作)。我还尝试使用?string将其强制转换为String,但它也不起作用

2 个答案:

答案 0 :(得分:1)

你尝试过吗?

${counted.first()?xml}/${counted.second()?xml} 

假设您的Java代码中有pair.first()second()

答案 1 :(得分:0)

我不确定Pair的API看起来如何,但是对于?keys,您可能不情愿地列出其方法。因此错误信息;您尝试打印方法本身,而不是其返回值。 (截至错误消息,因为那里没有x,FreeMarker更新会有所帮助。)正如Caleryn所说,只需调用这两种方法即可。如果您需要列出此内容,则可能需要将其放入List或数组中,除非Pair实现List(或者只是Collection)或{{1 }}。或者,如果这是项目中的一个更大的问题,FreeMarker有这个可插入的配置组件Iterable,你可以告诉FreeMarker将ObjectWrapper - s视为列表,以及如何处理。这需要一些更深入地了解FreeMarker。