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数据类型之间的自动转化。