freemarker如何遍历模板中所有变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freemarker如何遍历模板中所有变量相关的知识,希望对你有一定的参考价值。

我在用freemarker模板生成word文档,里面基础变量有近1000个,有一个没传值就报错。所以我想有没有办法先把所有的变量都遍历打印出来,就是说我想要一个模板中所有变量的清单,一个个手工去查太慢,高手们有无好办法?

freemarker在生成模板的时候,当前数据模型的上下文是个SimpleHash 的hash结构,a=1,b=2,...,我猜想题主是想遍历一下中所有的变量,但是在当前上下文这个在ftl中是没有名字的,所以没有办法在ftl中通过$name的方式拿到整个数据模型上下文;
但是可以通过Debug跟踪源码的方式获得,我通常的做法是(SpringMVC+Freemarker):在FreeMarkerView的processTemplate(Template template, SimpleHash model, HttpServletResponse response)中打断点,这个方法调用Template的process方法来生成模板的,这里的SimpleHash model这个入参就相当于数据上下文根,在debug视图中就可看到有哪些变量及其值了。
比如:Request=freemarker.ext.servlet.HttpRequestHashModel@25a50584,
JspTaglibs=freemarker.ext.jsp.TaglibFactory@66153398,
Application=freemarker.ext.servlet.ServletContextHashModel@4f3bc4e0,
springMacroRequestContext=org.springframework.web.servlet.support.RequestContext@27313074,
Session=freemarker.ext.servlet.HttpSessionHashModel@4e8918f6,
RequestParameters=freemarker.ext.servlet.HttpRequestParametersHashModel@438dad86
接下来你想再看比如RequestParameters中的所有变量及值,那么在ftl中可以:
<#list RequestParameters?keys as key>
$key = $RequestParameters[key]
</#list>
我通常都是这样来查看的,希望对你有帮助。
参考技术A 变量是用一个map存的,你遍历它就行了。或者用一个类来保存你所有的变量

以上是关于freemarker如何遍历模板中所有变量的主要内容,如果未能解决你的问题,请参考以下文章

Free 基础概念

如何在freemarker模板中调用反射方法?

Freemarker 模板语言中的变量名

使用 freemarker 为自定义变量格式化 xml 模板

如何基于一个 Freemarker 模板创建多个文件

Freemarker:如何使用枚举作为键遍历 Map