Freemarker - 将值添加到哈希值

时间:2011-04-02 06:09:58

标签: freemarker

我正在尝试在我的Freemarker模板中为HashMap添加值。我也在使用BeanWrapper,以便从Java对象中看到公开的方法。

在我的数据模型中,我有一个HashMap:

root.put("myName", new HashMap());

正如我上面提到的,我使用BeanWrapper以便我可以使用Java对象的所有方法:

BeansWrapper wrapper = new BeansWrapper();
wrapper.setExposureLevel(0);
cfg.setObjectWrapper(wrapper);//cfg = new Configuration();

现在在我的模板文件(test.ftl)中我正在尝试调用HashMap的put方法(我已经存储在数据模型中...上面):

${myName.put["fname:John"]}

这最后一行不起作用,我收到一个错误:

freemarker.template.TemplateException: Expected hash. myName.put evaluated instead to freemarker.ext.beans.SimpleMethodModel on line 16, column 11 in test.ftl.

你能告诉我,如何在模板文件中调用HashMap的put方法?

1 个答案:

答案 0 :(得分:2)

我建议您阅读Object Wrappers

我也喜欢FAQ中的this question,我现在引用它,

  

“也许你应该推动一些   计算回数据模型   建设阶段。理想情况下是数据模型   包含应显示的内容,以及   不是作为基础的东西   进一步的计算。“ - http://freemarker.sourceforge.net/docs/app_faq.html#faq_question_14

如果您需要数据模型中的变量,请不要将其放在地图中,请使用assign directive

唉,我明白世界并不完美,有时我们必须尽我们所能。

如果必须,我建议建立一个对象来包装你的地图,即

class MapWrapper
{
        Map map = new HashMap;
        ...
       public void put(Object arg)
       {
            map.put(arg);
       }
}

然后只需将您的地图包装器放入模型中,您就可以像任何其他方法一样调用put。