表达式是FreeMarker模板的核心功能,表达式放置在插值语法(${……})之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker标签结合,用于控制输出。
直接指定值
使用直接指定值的语法让FreeMarker直接输出插值中的值,而不是输出变量值。直接指定值可以是字符串、数值、布尔值、集合和MAP对象。
如果字符串中包含特殊字符,需要转义。
${"文件保存在c:\\盘"} --输出为-- 文件保存在c:\盘
${'名字是\"Hoffman\"'} --输出为-- 名字是"Hoffman
注意:Map对象的key和value都是表达式,但是key必须是字符串
{"语文":85, "数学":83, "程序":99}
Map对象的连接运算是将两个Map对象连接成一个新的Map对象,Map对象连接运算符是+。如果两个Map对象具有相同的key,则右边的值代替左边的值。
<#assign scores ={"语文":90, "数学":80}
+ {"数学":85, "英文":88}>
${scores.语文} --输出为-- 90
${scores.数学} --输出为-- 85
${scores.英文} --输出为-- 88
列表的项目是表达式,所以可以有下面的例子:
[2 + 2, [1, 2, 3, 4], "whatnot"]
可以使用数字范围定义数字序列,例如2..5等同于[2, 3, 4, 5],但是更有效率,注意数字范围没有方括号
可以定义反递增的数字范围,如5..2
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] as x>
${x}
</#list>
输出结果为:星期一 星期二 星期三 星期四 星期五 星期六 星期日
集合连接运算符
将两个集合连接成一个新的集合,连接集合的运算符是+。
<#list ["星期一", "星期二", "星期三", "星期四"] + ["星期五", "星期六", "星期日"] as x>
${x}
</#list>
输出结果为:星期一 星期二 星期三 星期四 星期五 星期六 星期日
输出变量值
FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性。
顶层变量
直接放在数据模型中的值
对于顶层变量,直接用${variable}来输出变量值,变量名只能是字母、数字、下划线、$、@和#的组合,且不能以数字开头。
//创建数据模型
Map root = new HashMap();
//name是一个顶层对象
root.put("name", "Hoffman");
输出结以上值,使用:${name}
集合元素
可根据集合元素的索引来输出集合元素。集合元素的索引以方括号指定。
注意:集合里第一个元素的索引是0。
假设有索引["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
输出第三个集合元素,使用:${week[2]}
Map元素
Map对象可以是HashMap,也可以是JavaBean(对于JavaBean可以把其属性当作key,把属性值当作value)
使用点语法,变量名字有顶层变量一样的限制,但方括号语法没有该限制,因为名字是任意表达式的结果。
字符串操作
字符串连接
两种方法:
1. 使用${..}(或#{..})在字符串常量部分插入表达式的值,从而完成字符串连接。
2. 直接使用连接运算符(+)来连接字符串
Map root = new HashMap();
root.put("user", "Hoffman");
将user变量的值和常量连接起来,有两种语法:
${"Hello ${user}!"}或
${"${user}${user}${user}${user}"}
${"Hello " + user + "!"}或
${user + user + user + user}
${..}只能用于文本部分,下面的代码是错误的:
<#if ${isBig}>Wow!</#if>
<#if "${isBig}">Wow!</#if>
应该写成:
<#if isBig>Wow!</#if>
截取子串
Map root = new HashMap();
root.put("user", "Hoffman");
截取通过如下语法:
${user[0]}${user[4]}
${user[1..4]}
返回结果为:
Hm
offm
算术运算符
FreeMarker支持的算术运算符包括:+、-、*、/、%。
操作符两边必须是数字,因此下面的代码是错误的:
${3 * "5"} <#-- WRONG! -->
使用+操作符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串,例如:
${3 + "5"} 输出结果是:35
比较运算符
=(或者==):两个值是否相等
!=:两个值是否不相等
=和!=两边必须是相同类型的值,否则会产生错误,例如<#if 1 = "1">会引起错误。
Freemarker是精确比较,所以对"x"、"x "和"X"是不相等的。
还有>(或者gt)、>=(或者gte)、<(或者lt)、<=(或者lte):
对数字和日期可以使用<、<=、>和>=,但不能用于字符串。
由于Freemarker会将>解释成FTL标记的结束字符,所以对于>和>=可以使用括号来避免这种情况
例如<#if (x > y)>。
另一种替代的方法是,使用lt、lte、gt和gte来替代<、<=、>和>=。
逻辑运算符
逻辑与:&&(and)
逻辑或:||(or)
逻辑非:!(not)
逻辑运算符只能用于布尔值,否则会产生错误。
分享到:
相关推荐
1. 模板:Freemarker的核心是模板,模板是HTML或其他文本文件,其中包含Freemarker表达式和指令,这些元素会被解释并替换为实际值。 2. 数据模型:数据模型是Java对象集合,它们提供给模板使用。你可以将Freemarker...
2. 编写模板:创建一个`.ftl`文件,例如`wordTemplate.ftl`,其中包含Word文档的结构和Freemarker表达式。 3. 设置数据模型:在Java代码中,构建包含所需数据的对象或Map。 4. 渲染模板:使用`Template`类加载模板...
2. FreeMarker模板文件:包含了HTML结构和FreeMarker表达式,用于展示数据。 3. 配置文件:如`struts-config.xml`或`struts2-struts-plugin.xml`,定义了Action与模板的映射。 4. 运行所需的依赖库:包括Struts和...
在本例中,`freemarker-util`是一个特定的FreeMarker工具包,它为FreeMarker提供了与jxl集成的能力,允许开发者在Excel模板中直接使用FreeMarker表达式。这意味着开发者可以在Excel单元格中定义FreeMarker语法,如 `...
这里的`${year}`就是Freemarker表达式,用于在运行时被Java对象中的值替换。 3. **配置Freemarker**: 在Java代码中,首先需要初始化一个`Configuration`对象,设置默认编码(如UTF-8),并加载模板文件所在的类...
模板是HTML或其他格式的文件,包含Freemarker表达式;数据模型是提供给模板的数据源;配置则是设置模板解析和执行的规则。 2. **模板语言**:Freemarker模板语言包括控制结构(如`<#if>`、`<#foreach>`)、逻辑...
这些文件包含了HTML结构以及FreeMarker表达式,用于动态生成页面内容。 4. **设置ModelAndView**:在Spring MVC的Controller方法中,创建`ModelAndView`对象并设置模型数据,然后返回对应的视图名。视图名应与...
string("yyyy-MM-dd HH:mm:ss")}`是一个Freemarker表达式,它会计算当前时间并按照指定格式输出。 Spring Boot还允许我们自定义Freemarker的配置,例如改变模板文件路径、设置日期格式等。可以在`application....
FreeMarker表达式可以访问Java对象,从而实现数据驱动的文档生成。 结合`jacob`和`FreeMarker`进行Word导出的基本步骤如下: 1. **创建模板文件**:首先,你需要创建一个`.ftl`(FreeMarker模板语言)文件,作为...
在文件中,你可以写入HTML结构,并在需要动态内容的地方插入FreeMarker表达式。例如,如果你有一个用户对象,你可以这样显示用户名: ```html 用户信息 欢迎,${user.name}! ``` 这里的`${user.name}`是...
1. 模板:FreeMarker的工作核心是模板,模板是一份HTML或XML文件,其中包含静态文本和FreeMarker表达式或指令。这些表达式和指令会在运行时由FreeMarker引擎解析并替换为相应的值。 2. 数据模型:数据模型是...
2. **创建模板文件**:在模板文件(通常是`.ftl`扩展名)中,你可以编写HTML代码,并插入FreeMarker表达式和指令。表达式用于显示数据模型中的值,如`${variable}`;指令则用于控制流程,如`<#if>`、`<#foreach>`等...
模板包含静态文本和动态内容,动态内容由FreeMarker表达式控制。 2. 数据模型:FreeMarker从Java应用程序中获取数据,这些数据构成了模板渲染时的数据模型。数据模型可以是任何实现了`Map`接口的对象,或者通过`...
1. **模板(Templates)**: Freemarker的核心是模板文件,它包含静态文本和Freemarker表达式。表达式可以是变量、控制结构(如条件语句和循环)或函数调用。 2. **数据模型(Data Model)**: 这是传递给模板的数据结构...
Freemarker是一个基于模板的语言,模板是HTML或其他格式的文本,其中包含了由Freemarker表达式控制的动态部分。这些表达式与Java对象的数据模型相对应,当模板被处理时,表达式会被替换为相应的值。 **2. 数据模型*...
1. 模板:Freemarker模板是纯文本文件,通常包含HTML、XML或其他格式,其中插入了特殊的Freemarker表达式,这些表达式在运行时被替换为相应的数据。 2. 数据模型:Freemarker模板需要与数据模型结合,数据模型是由...
1. **模板(Template)**: 模板是FreeMarker的核心,它是一个文本文件,其中包含固定的文本和由FreeMarker表达式控制的动态内容。这些表达式在运行时会被替换为实际的数据。 2. **数据模型(Data Model)**: 这是...
在上述的Freemarker入门实例中,我们看到一个简单的`product.ftl`模板文件,其中包含HTML结构以及`${...}`包围的Freemarker表达式。这些表达式在运行时会被对应的数据模型中的值替换。例如,`${user}`和`${...
这些模板包含HTML代码,其中可以插入FreeMarker表达式和指令来引用Java对象中的数据。 3. **Action与模型绑定**:在Struts2的动作类(Action)中,你需要设置要传递给FreeMarker模板的数据。这些数据通常是在执行...
- **模板**:它是Freemarker的主要工作单元,包含HTML和Freemarker表达式,用于定义页面的布局和内容。 - **数据模型**:这是Freemarker模板所操作的对象,通常由Java对象构成,如POJOs(Plain Old Java Objects)...