我正在尝试在我的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
方法?
答案 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。