1.默认值
变量不存在或者为null是常常出现的情况。我们可以给它指定一个默认值。,通过在变量名
后面跟着一个!和默认值
<h1>Welcome ${user!"Anonymous"}!</h1>
另外默认值只是针对最后一级变量而言的。如果是多级变量如
animals.python.price!"0.00",那么如果animals或者python都null的话,那么结果依然是异常。为了防止这种情况可以使用(animals.python.price)!"0"
对于??也是同样用来的处理这种逻辑的:
animals.python.price??对比(animals.python.price)??来看。
使用形式概览: unsafe_expr!default_expr 或unsafe_expr! 或
(unsafe_expr)!default_expr 或(unsafe_expr)!
这个操作符允许你为可能不存在的变量指定一个默认值。
警告:
如果在!后面有复合表达式,如1 + x,通常使用括号,像${x!(1 + y)}或${(x!1)
+ y)},这样就根据你的意图来确定优先级。由于FreeMarker 2.3.x 版本的源码中的小失误
所以必须这么来做。!(作为默认值操作)的优先级非常低。这就意味着${x!1 + y}会
被FreeMarker 误解为${x!(1 + y)},而真实的意义是${(x!1) + y}。这个源码的
错误在FreeMarker 2.4 中会得到修正。在编程中注意这个错误,要么就使用FreeMarker 2.4!
如果默认值被省略了,那么结果将会是空串,空序列或空哈希表。(这是FreeMarker 允
许多类型值的体现)如果想让默认值为0 或false,则注意不能省略它。例如:
默认值:name!"unknown" 或者(user.name)!"unknown" 或者
name! 或者 (user.name)!
检测不存在的值:name?? 或者(user.name)??
2.当需要给插值或者指令参数提供值时,可以使用变量或其他复杂的表达式。例如,我们
设x 为8,y 为5,那么(x+y)/2 的值就会被处理成数字类型的值6.5
在我们展开细节之前,先来看一些具体的例子:
当给插值提供值时:插值的使用方式为${expression},把它放到你想输出文
本的位置上然后给值就可以打印了。即${(5+8)/2}会打印”6.5”出来(如果输出
的语言不是英语,也可能打印出”6,5”)。
3.直接指定值
字符串:"Foo" 或者 'Foo' 或者 "It's \"quoted\"" 或者
r"C:\raw\string"
数字:123.45
序列:["foo", "bar", 123.45], 1..100
哈希表:{"name":"green mouse", "price":150}等等。设置直接变量。
4.字符串转换成数字
如
${project.price?int}
5.比较
比较运算
有时我们需要知道两个值是否相等,或者哪个数的值更大一点。
为了演示具体的例子,我们在这里使用if 指令。if 指令的用法是:<#if
expression>...</#if>,其中的表达式的值必须是布尔类型,否则将会出错,模板
执行中断。如果表达式的结果是true,那么在开始和结束标记内的内容将会被执行,否则
就会被跳过。
测试两个值相等使用=(或者采用Java 和C 语言中的==,二者是完全等同的。)
测试两个值不等使用!=。例子中假设user 是”Big Joe”
6.检查值是否存在
使用形式概览:unsafe_expr??或(unsafe_expr)??
这个操作符告诉我们一个值是否存在。基于这种情况,结果是true 或false。
示例如下,假设并没有名为mouse 的变量:
<#if mouse??>
Mouse found
<#else>
No mouse found
</#if>
Creating mouse...
<#assign mouse = "Jerry">
<#if mouse??>
Mouse found
<#else>
No mouse found
</#if>
访问非顶层变量的使用规则和默认值操作符也是一样的,即product.color??和
(product.color)?? 。
7.插值
插值的使用语法是:${expression},expression 可以是所有种类的表达式
(比如${100 + x})。
插值表达式的结果必须是字符串,数字或日期类型的,因为只有数字和日期类型可以自
动转换为字符串类型,其他类型的值(如布尔,序列)只能手动转换为字符串类型,否则就
会发生错误导致模板执行中止。
如果插值在文本区(也就是说,不再字符串表达式中),如果escapse 指令起作用了,
即将被插入的字符串会被自动转义。如果你要生成HTML,那么强烈建议你利用它来阻止跨
站脚本攻击和非格式良好的HTML 页面。这里有一个示例:
<#escape x as x?html>
...
<p>Title: ${book.title}</p>
<p>Description:
<#noescape>${book.description}</#noescape></p>
<h2>Comments:</h2>
<#list comments as comment>
<div class="comment">
${comment}
</div>
</#list>
...
</#escape>
这个示例展示了当生成HTML 时,你最好将完整的模板放入到escape 指令中。那么,
如果book.title 包含&,它就会在输出中被替换成&,而页面还会保持格式良好
的HTML。如果用户注释包含如<iframe>(或其它的元素)的标记,那么就会被转义成
如<iframe>的样子,使他们没有任何有害点。但是有时在数据模型中真的需要
HTML,比如我们假设上面的book.description 在数据库中的存储是HTML 格式的,
那么此时你不得不使用noescape 来抵消escape 的转义,模板就会像这样了:
<p>Title: ${book.title?html}</p>
<p>Description: ${book.description}</p>
<h2>Comments:</h2>
<#list comments as comment>
<div class="comment">
${comment?html}
</div>
</#list>
分享到:
相关推荐
本篇将深入探讨如何自定义FreeMarker标签,以扩展其功能并适应特定项目需求。 首先,理解FreeMarker的默认标签语法至关重要。FreeMarker使用${...}表达式来插入变量,#{...}用于输出注释,以及、等控制结构进行条件...
而Freemarker则是一种轻量级的、基于模板的Java模板引擎,常用于Web应用中的动态内容生成,比如JSP替代技术。它允许开发者将业务逻辑与页面展示分离,提高代码的可维护性和可读性。 "eclipse的freemarker插件"是指...
`freemarker-2.3.23.jar`是Freemarker库的一个版本,发布于2.3.23,这个版本可能包含了对早期版本的一些改进、新功能或bug修复。 Freemarker的核心概念是模板语言,它是一种声明式的编程方式,允许开发者编写不包含...
FreeMarker的设计理念是将表现层(视图)和业务逻辑层(控制器)分离,从而实现MVC(Model-View-Controller)架构中的“View”部分。 FreeMarker的核心概念是模板文件,这是一种特殊的文本文件,其中包含可替换的...
赠送jar包:freemarker-2.3.31.jar; 赠送原API文档:freemarker-2.3.31-javadoc.jar; 赠送源代码:freemarker-2.3.31-sources.jar; 赠送Maven依赖信息文件:freemarker-2.3.31.pom; 包含翻译后的API文档:...
这个"freemarker-2.3.28.jar"是Freemarker库的一个具体版本,版本号为2.3.28,它是Java的一个可执行的JAR(Java Archive)文件,用于在Eclipse集成开发环境中作为插件使用。 在Freemarker的2.3.28版本中,我们可以...
1. **创建模板**:在Freemarker中,我们需要创建一个`.ftl`(Freemarker Template Language)文件,其中包含静态文本和动态占位符。动态占位符由${}或#{}包裹,用于插入数据模型中的值。例如,`${title}</h1>`会将...
2.3.23是FreeMarker的一个稳定版本,这个版本的官方中文文档提供了全面的指导和说明,帮助开发者更好地理解和使用这个模板语言。 在FreeMarker的核心概念中,它是一个基于数据驱动的模板语言。这意味着,开发者不...
赠送jar包:freemarker-2.3.30.jar; 赠送原API文档:freemarker-2.3.30-javadoc.jar; 赠送源代码:freemarker-2.3.30-sources.jar; 赠送Maven依赖信息文件:freemarker-2.3.30.pom; 包含翻译后的API文档:...
### Velocity与FreeMarker的区别 在IT领域特别是Java开发中,模板引擎是不可或缺的一部分,它们用于将数据模型转换为HTML、PDF、Word文档等格式。在众多模板引擎中,Velocity和FreeMarker是两种非常受欢迎的选择。...
Velocity和Freemarker模板技术比较 模板技术在现代软件开发中扮演着重要角色,而在目前最流行的两种模板技术中, Velocity 和 Freemarker 独占鳌头。在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity ...
Freemarker 简介及标签详解大全 FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写。FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。虽然 FreeMarker ...
FreeMarker提供了一种灵活且强大的方式来处理动态内容,尤其适用于Web开发中的视图层。在FreeMarker中实现通用的分页功能是提高Web应用程序性能和用户体验的重要一环。 ### FreeMarker通用分页知识点解析 #### 1. ...
这个示例是关于如何使用Freemarker来生成XML文件,对于初学者来说,理解这个过程有助于掌握Freemarker的基本用法和XML的生成技巧。 在Java中,Freemarker与数据模型结合,通过模板文件生成输出。对于XML生成,首先...
本话题主要探讨的是如何利用可视化div布局来生成FreeMarker模板,并结合Spring MVC 3框架进行应用。下面将详细阐述这些概念及其相关知识点。 1. **FreeMarker模板引擎**:FreeMarker是一个开源的Java模板引擎,它...
本主题将深入探讨如何利用Freemarker模板和wkhtmltox工具来实现这一功能。 **Freemarker模板** 是一个强大的Java模板引擎,用于动态生成文本输出,如HTML、XML或PDF。它支持变量替换、控制结构(如if/else)和复杂...
Freemarker是一个强大的模板引擎,常用于JavaEE应用中的视图层处理,尤其与Struts2等MVC框架配合使用,能实现灵活的动态页面渲染。这个"freemarker Demo"是一个适合初学者的示例项目,旨在帮助新接触Freemarker的...
根据提供的文件信息,我们可以深入探讨FreeMarker的相关知识点及其在网页模板设计中的应用。FreeMarker是一种用Java编写的模板引擎,其主要用途在于帮助开发者高效地生成动态内容,尤其是在Web开发领域有着广泛的...
**SpringBoot集成Freemarker与Shiro框架详解** 在现代Web开发中,SpringBoot因其简洁、高效的特性,已经成为很多开发者的选择。而FreeMarker和Shiro则分别是常用的模板引擎和安全框架,它们能帮助我们构建出功能...