dram.me

FreeMarker中实现Java端调用模块端宏

FreeMarker虽然提供有丰富的Java接口,但在实现Java端调用模块端宏这一功能点上,并没有很好的支持。虽然可以通过Environment.getVariable通过宏名称获取到Macro对象,但Macro整个类都已经被弃用了。

本文介绍通过Environment.setVariable传入变量结合with_args调用宏的方法,变通地实现宏调用。

具体思路是先通过Environment.setVariable将参数以字典形式传入,例如$args$macroName,然后在该环境中渲染模板<@%s?with_args($args$macroName)/>

在参数传入中,可以通过DefaultObjectWrapper实现Java数据类型和FreeMarker数据类型之间的自动转化。