In FreeMarker 2.2, Template has an undocumented method for examining the parsed template: getRootTreeNode 使用freemarker模板引擎进行传统的开发有个固定的模式就是我们知道模板上有哪些标签,然后我们会获取这些标签的数据来进行data+model的组合。但是如果模板上的标签名字或者个数不确定的话,那么我们就需要知道模板上到底有那些标签了。这样做的好处有以下几个方面:
1、我们可以根据模板实际拥有的标签来进行数据获取,避免了将整个系统的标签都穷举一遍,分别查取数据
2、我们可以分析获取到的标签名字,根据标签名字来做逻辑
但是freemarker2.2官方的faq列表的第26项中确是明确的说不想支持这个功能。但是又很猥琐的提出了一个解决方案,就是将模板的各个数据项进行了拆分。提供一个半公开的访问接口。
view plaincopy to clipboardprint?
In FreeMarker 2.2, Template has an undocumented method for examining the parsed template: getRootTreeNode
In FreeMarker 2.2, Template has an undocumented method for examining the parsed template: getRootTreeNode
通过查看Template的源代码发现,她将那个模板标签封装的是十分严密,对外提供的方法和类都是包内可见,实在是让人难以入手。最后不得不想个歪招将我们要的标签给打印出来了。如下
view plaincopy to clipboardprint?
Template t = getFreeMarkerCFG().getTemplate(templateFileName);
//获取所有的标签项
TemplateElement te=t.getRootTreeNode();
for(Enumeration children = te.children(); children.hasMoreElements();){
Object obj=children.nextElement();
if("class freemarker.core.DollarVariable".equals(obj.getClass().toString())){
System.out.println(obj.toString());
}
}
分享到:
相关推荐
在Controller中,我们需要根据请求参数(如`page`)实例化`Pager`对象,获取当前页的数据并传递给FreeMarker模板。模板接收到数据后,通过调用`paging`宏生成分页HTML。 总结起来,FreeMarker自定义分页标签宏的...
3. **POI读取模板**: 使用Apache POI的`XWPFDocument`类打开模板文件,获取其中的段落、表格等元素。 4. **替换占位符**: 遍历模板文档,找到图片占位符,用FreeMarker的`process`方法替换为实际的图片数据。这通常...
这篇名为“初试FreeMarker模板的一些问题”的博客可能涵盖了在学习和使用FreeMarker过程中遇到的基础问题和解决方法。 1. **模板语言基础** FreeMarker使用模板语言来定义如何将数据模型渲染成可读的输出。模板由...
总的来说,基于FreeMarker模板的数据采集系统是一种将高效的数据获取能力与灵活的模板渲染结合的解决方案。开发者可以利用FreeMarker的强大功能,自定义模板来满足特定的数据展示需求,同时,数据采集部分则负责从...
标题与描述概述的知识点主要集中在Freemarker模板引擎在实现分页功能时的应用,特别是当后端数据库为MySQL的情况下。Freemarker是一个用于生成动态文本的模板引擎,它被广泛应用于Web开发中,用于将数据模型转换成...
关于标签中的"freemarker",它强调了Freemarker作为模板引擎的角色;"模板"指的是用于生成Word文档的XML文件;"生成word"则表明了我们是在使用Freemarker进行动态内容生成,具体是Word文档。 总结一下,这个示例...
1. **Shiro标签库**:Shiro提供了与FreeMarker集成的标签库,使得在FreeMarker模板中可以直接使用Shiro的权限控制功能。例如,`<@shiro.hasPermission>`标签可以用来判断当前用户是否有某个操作的权限,如果用户有...
这篇学习文档将带你深入理解Freemarker的基础知识和高级特性,并通过Jeecms模板标签的使用,让你更好地掌握实际开发中的应用。 1. **Freemarker基础** - **模板语言**:Freemarker使用简单的文本模板语言,将数据...
4. **Freemarker模板**:在Freemarker模板中,你可以使用Struts2提供的`<s:iterator>`标签遍历当前页的数据,同时使用自定义的Freemarker宏或Struts2的`<s:url>`标签生成分页链接。例如,可以创建一个`pagination....
【SpringBoot2 整合FreeMarker模板,完成页面静态化处理】 在Web开发中,页面静态化是一种提高网站性能和用户体验的技术。它涉及到将原本动态生成的页面转换为静态HTML文件,减少对服务器的依赖,加快页面加载速度...
4. **自定义函数和标签**:Freemarker支持自定义函数(`TemplateMethodModelEx`)和标签库(`TemplateDirectiveModel`),你可以扩展Freemarker的功能,使其更符合项目需求。 三、模板语法 Freemarker的模板语法...
### Freemarker语法完整版知识点详解 #### A....通过以上详细解释,读者可以更好地理解Freemarker的核心概念、指令用法以及一些常见的技巧和注意事项,从而更高效地使用Freemarker进行模板渲染工作。
1. **变量与表达式**:在FreeMarker模板中, `${variable}` 用于表示变量,它会从数据模型中查找对应的值并输出。表达式支持算术运算、比较运算和逻辑运算,例如 `${a + b}`、`${c > d}` 和 `${e && f}`。 2. **...
1. **变量和表达式**:在FreeMarker模板中,`${}`内的内容是表达式,用于获取Java对象的属性或执行简单的运算。例如`${user.name}`将输出用户对象的name属性。 2. **指令**:FreeMarker提供了一系列的内置指令,如`...
2. 数据模型:这是提供给Freemarker模板的数据源,通常由应用程序创建并传递给Freemarker,可以包含各种类型的对象,如字符串、数字、列表、地图等。 3. 模板处理:Freemarker引擎接收模板和数据模型,然后生成最终...
1. **Freemarker模板语言**:Freemarker使用模板语言,由`<#...>`和`${...}`这样的标记组成,用来控制逻辑和显示数据。例如,`<#if ...>`用于条件判断,`${...}`用于输出变量值。 2. **配置Struts2**:在Struts2的...
- 当Freemarker模板中出现错误时,Struts2会捕获异常并提供相应的错误页面,这可以通过配置`<struts>`标签内的`<global-results>`和`<global-exception-mappings>`进行设置。 8. **性能优化** - Freemarker提供了...
生成过程中,需要先将Word模板另存为XML格式,然后将XML文件转换为Freemarker模板,使用Freemarker标签替换模板中的动态数据。对于图片的处理,可以将图片转换为base64编码,然后在Freemarker模板中使用循环遍历的...
- 首先,创建一个Freemarker模板(`.ftl`文件),其中包含动态内容的占位符,如`${variable}`。 - 在后端代码中,根据业务逻辑填充数据模型,并传递给Freemarker模板引擎。 - 模板引擎将模板与数据模型合并,生成...