Freemarker - 模板预处理

时间:2012-03-07 09:11:10

标签: java freemarker

我想知道,是否有办法用一些规则预处理freemarker模板 - 我想添加一些语法糖,这不是指令,也不是方法。

Fo实例我有变量,我这样打印:

${item.getLocale(currentLocale).name}
${item.getLocale(currentLocale).text}
${item.parent.getLocale(currentLocale).name}
${item.parent.getLocale(currentLocale).text}

显然,getLocale结构使得整个表达式非常难看。我想要实现的是能够写:

${item.l.name}
${item.l.text}
${item.parent.l.name}
${item.parent.l.text}

这样编译过程中所有.l.都会被重写为.getLocale(currentLocale)

有一些不错的方法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这就是为什么FreeMarker中存在对象包装的原因;您可以以自定义方式将数据呈现给模板。我想item属于特定的Java类。因此,您可以扩展DefaultObjectWrapperBeansWrapper以专门包装这些项目,然后在初始化FreeMarker时使用Configuration.setObjectWrapper(new YourObjectWrapper())。 (请参阅DefaultObjectWrapper的源代码作为自定义的示例;它特别扩展BeansWrapper以包装XML节点,Jython对象等。)因此,当您在模板中有${item.name}时,这是对Java端YourHashModel.get("name")的调用(YourHashModel扩展freemarker.template.TemplateHashModel),而get方法可以return new SimpleScalar(item.getLocale(currentLocale).get("name"))或类似。< / p>