freemarker之模板开发(其它之自定义指令)
----------
自定义指令可以使用macro指令来定义,这是模板设计者所关心的内容。Java程序员若不想在模板中实现自定义指令,而是在java语言中实现指令的定义,这时可以使用:freemarker.template.TemplateDirectiveModel类来扩展。
宏
宏是有一个变量名的模板片段。你可以在模板中使用宏作为自定义指令,这样就能进行重复性的工作。
如例:
- <#macro greet>
- <font size="+2">Hello Joe!</font>
- </#macro>
macro指令自身不打印任何内容,它只是用来创建宏变量,所以就会有一个名为greet的变量,在<#macro greet>和</#macro>之间的内容(称为宏定义体)当使用它作为指令时将会被执行。你可以在FTL标记中通过@代替#来使用自定义指令。使用变量名作为指令名。而且,自定义指令的结束标记也是需要的,如:<@greet></@greet>
因为<anything>,/anything>和<anything/>是相同的,你也可以使用:<@greet/>
宏能做的事情还有很多,因为在<#macro...>和</#macro>之间的东西是模板片段,也就是说它可以包含插值(${..})和FTL标签(如:<#if...>...</#if>)。
注意:程序员通常将使用<@...>,这称为宏调用。
参数
在macro指令中,宏名称的后面位置是用来定义变量的。如例:
- <#macro greet person>
- <font size="+2">Hello ${person}!</font>
- </#macro>
那么就可以这样来使用这个宏:
- <@greet person="Fred"/>
使用预定义指令时,参数的值(=号后边的值)可以是FTL表达式。这样,不像 HTML,"Fred"的引号就可以不用要了。<@greet person=Fred/>也意味着使用变量的值Fred作为person参数,而不是字符串"Fred"。当然参数值并不一定是字符串类型,也可 以是数字,布尔值,哈希表,序列等...也可以在=号左边使用复杂表达式(比如:someParam=(price+50)*1.25)
自定义指令可以有多个参数,如:
- <#macro greet person color>
- <font size="+2" color="${color}">Hello ${persion}!</font>
- </#macro>
那么,这个宏就可以这样来使用:
- <@greet person="Fred" color="black"/>
同时也必须给出在宏中定义所有参数的值。如果你尝试<@greet person="Fred"/>时也会发生错误,因为忘记指定color的值了。
根据FTL表达式规则,明白下面这一点是至关重要的,someParam=foo和 someParam="${foo}"是不同的。第一种情况,是把变量foo的值作为参数的值来使用。第二种情况则是使用插值形式的字符串,那么参数值就 是字符串了,这个时候,foo的值呈现为文本,而不管foo是什么类型的。
宏参数的另外一个重要的方面是它们是局部变量。
嵌套内容
自定义指令可以嵌套内容,和预定义指令相似。如:
- <#macro border>
- <table border=4 cellspacing=0 cellpadding=4><tr><td>
- <#nested>
- </td></tr></table>
- </#macro>
注:<#nested>指令执行位于开始和结束标记指令之间的模板代码段。如果这样写:
- <@border>The bordered text</@border>
那么就会输出:
- <table border=4 cellspacing=0 cellpadding=4><tr><td>
- The bordered text
- </td></tr></table>
如果不使用nested指令,那么嵌套的内容就不会被执行,前面的例子如果这样写:
- <@greet person="Joe">
- Anything.
- </@greet>
FreeMarker不会把它视为错误,只是打印:
- <font size="+2">Hello Joe!</font>
嵌套的内容被忽略了,因为greet宏没有使用nested指令。
宏和循环变量
像list这样的预定义指令可以使用循环变量,如例:
- <#macro do_thrice>
- <#nested 1>
- <#nested 2>
- <#nested 3>
- </#macro>
用户自定义指令,使用";"代替"as"
- <@do_thrice ; x>
- ${x} Anything.
- </@do_thrice>
将会输出:
1 Anything.
2 Anything.
3 Anything.
nested指令(当然参数可以是任意的表达式)的参数,循环变量的名称是在自定义指令的开始标记(<@...>)的参数后面通过分号确定的。
相关推荐
NULL 博文链接:https://zhenghuazhi.iteye.com/blog/1923544
里面 集合了 一个 简单的 Freemarker demo 代码 和一个 freemarker 自定义标签代码
Freemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java
freemarker根据模板生成word,freemarker根据模板生成word,freemarker根据模板生成word
基于Freemarker模板的纯Java代码实现的代码生成器工具
spring mvc freemarker 自定义标签demo spring mvc 通过自定义的标签在jsp页面调用,初学,记录下做个备忘
Freemarker 模板开发 Freemarker 入门
Java freemarker 模板生成word动态表格
Freemarker+poi 模板生成word+导入图片 直接导入eclipse即可,希望对大家有所帮助
一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
通过springboot 整合freemarker模板引擎,自动发送html格式邮件
大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出‘.doc’ word文档。经测试这样方式生成的word文档完全符合office标准,...
FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力...
freemarker java模板技术 很详细的注释 适合初学者,了解思路
FreeMarker通用模板。FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款...
freemarker生成word文档模板,配合文档使用,效果更佳。https://blog.csdn.net/xueshuiyy/article/details/86748009
附件包含了mybatis-plus自动生成代码,基于freemarker的模板。包括常规的curd。 【特点】针对每个接口都有对应的入参和出参,不公用entity。 如,add接口,则入参会自动生成为addEntityReq。具体可下载模板进行查看...
在这里将通过Freemarker这个模板引擎来实现导出 Word,项目不限于Swing,SSH,SSM,Spring Boot 之类的 ————————————— Spring Boot,Freemarker 编辑好格式的Word文档 1份 将Word文档里需要填充的地方...
通过程序生成PDF文件, wkhtmltox-0.12.3.2_msvc2013-win64.exe html-url
1.这是一个在根目录下的mail.properties文件中配好发送邮件地址和接收邮箱地址的实例,利用freeMarker模板作为展示,在测试类中提供配固定接收邮箱地址和手动输入接收邮箱地址两种方法进行发送试验,结果都能实现...