`

freemarker之模板开发(模板表达式之直接指定值--详细)

阅读更多

freemarker之模板开发(模板表达式之直接指定值--详细)

----------

 

 

freemarker之模板(表达式之直接指定值--详细)

 

1.字符串

在文本中确定字符串值的方法是看引号和单引号,比如:"some text"或'some text',这两种形式是

相等的。如果文本本身包含用于字符引用的引号或反斜杠时,应该在它们的前面再加一个反斜杠,这

就是转义。

2.数字

输入不带引号的数字就可以直接指定一个数字,必须使用点作为小数的分隔符而不能是其他的分组分隔符。

3.布尔值

直接写true或false就表征一个布尔值了,不需使用引号。

4.序列

指定一个文字的序列,使用逗号来分隔其中的每个子变量,然后把整个列表放到方括号中,如:

<#list ['winter','spring','summer','autumn'] as x>

${x}

</#list>

也可以用start..end定义存储数字范围的序列,这里的start和end是处理数字值表达式,比如:2..5

和[2,3,4,5]是相同的。但是使用前者会更有效率(内存占用少而且速度快)。可以看出前者也没有使用

方括号,这样也可以用来定义递减的数字范围,比如5..2。(此外,还可以省略end,只需5..即可,但

这样序列默认包含5,6,7,等递增量直到无穷大)

5.哈希表

在模板中指定一个哈希表,就可以遍历用逗号分隔开的"键/值"对,把列表放到花括号内。键和值成对出

现并以冒号分隔。看这个例子:{"name":"green mouse","price":150}。注意:用来检索的键必须是字符

串类型。

6.检索变量

a.顶层变量

为了访问顶层的变量,可以简单地使用变量名。如:${user}

b.从哈希表中检索数据

如例,我们可以通过book.title来读取title表达式。我们想指定同一个表达式的子变量,那么还有另外

一种语法格式:book["title"]。下面这样混合的方式也是可以的:

book.author.name,book["author"].name,book.author["name"],book["author"]["name"]

c.从序列中检索数据

这和从哈希表中检索是相同的,但是你只能使用方括号语法形式来进行,而且方括号内的表达式最终必须

是一个数字而不是字符串。如:animails[0].name。

d.特殊变量

特殊变量是由FreeMarker引擎本身定义的,语法如下:.variable_name。通常情况下是不需使用特殊变量的。

7.字符串操作

a.插值(或连接)

如果要在字符串中插入表达式的值,可以使用${...},如:${"hello ${user}!"}

b.获取一个字符

在给定索引值时可以获取字符串中的一个字符,如例,假设user是"Big Joe",那么:

${user[0]},${user[4]},将打印出:B,J.

8.序列操作

a.连接

序列的连接可以使用+号来进行,例如:

<#list ["Joe","Fred"] + ["Julia","Kate"] as user>

${user]

</#list>

要注意不要在很多重复连接时使用序列连接操作,比如在循环中往序列上追加项目,而这样的使用是可以的:

<#list users + admins as person>。尽管序列连接的很快,而且速度是和被连接序列的大小相独立的,

但是最终的结果序列的读取却比原先的两个序列慢那么一点。

9.序列切分 

使用[firstindex..lastindex]可以获取序列中的一部分,这里的firstindex和lastindex表达式的结果是数字。

如:seq="abcdefg", seq[1..4]就等于bcde ,seq[3..]等于defg

10.哈希表操作

a.连接

像连接字符串那样,也可以使用+号的方式来连接哈希表。如果两个哈希表含有键相同的项,那么在+号右侧的

哈希表中的项目优先。如:

<#assign ages={"Joe":23,"Fred":25}+{"Joe":30,"Julia":18}>

Joe is ${ages.Joe}

Fred is ${ages.Fred}

Julia is ${ages.Julia}

将会打印出:

Joe is 30

Fred is 25

Julia is 18

11.算数运算

算数运算包含基本的四则运算和求模运算。如例:

${100-x*x},${x/2},${12*10}

有时我们只想获取计算结果的整数部分,这可以使用内建函数int来解决。如例:

${(x/2)?int}

${1.1?int}

12.比较运算

测试两个值相等使用= ,如例:<#if user = "Big Joe">

测试两个值不等使用!=,如例:<#if user != "Big Joe">

对数字和日期类型的比较,也可以使用<,<=,>=和>。不能把它们当作字符串来比较。如:

<#if x <= 12>

xxxxxx

</#if>

使用>=和>的时候有一点小问题。FreeMarker解释>的时候可以把当当作FTL标签的结束符。为了

避免这种问题,不得不将表达式放到括号内:<#if (x>y)>。

13.逻辑操作

常用的逻辑操作符:

a.逻辑或:||

b.逻辑与: &&

c.逻辑非:!

逻辑操作符仅仅在布尔值之间有效,若用在其它类型将会产生错误导致模板执行中止。

如例:

<#if x<12 && color = "green">

we have less than 12 things,and they are green.

</#if>

14.内建函数

正如其名,内建函数提供始终可用的内置功能。使用内建函数的语法和访问哈希表子变量的语法

很像,除了使用?号来代替点,其他都一样。例如得到字符串的大写形式:user?upper_case。

现在,我们只需要了解一些重要的内建函数就可以了。

字符串使用的内建函数:

a.html: 字符串中所有的特殊html字符都需要用实体引用来代替(比如:<代替&lt;)

b.cap_first: 字符串的第一个字母变为大写形式

c.lower_case: 字符串的小写形式

d.upper_case: 字符串的大写形式

e.trim: 去掉字符串首尾的空格

序列使用的内建函数:

a.size: 序列中元素的个数

数字使用的内建函数:

a.int: 数字的整数部分(比如:-1.9?int就是-1)

15.方法调用

可以使用方法调用操作来使用一个已经定义过的方法。方法调用的语法形式是使用逗号来分割在

括号内的表达式而形成的参数列表,这些值就是参数。如例:

${repeat("what",3)}

16.处理不存在的值

a.默认值

使用形式概览:unsafe_expr!default_expr或unsafe_expr!或(unsafe_expr)!default_expr

或(unsafe_expr)!

如例:${mouse!"No mouse."}

默认值可以是任何类型的表达式,也可以不必是字符串。你可以这样写:hits!0或

colors!["red","green","blue"]。

注意:如果在!后面有复合表达式,如1+x,通常使用括号,像:${x!(1+y)},这样就根据

你的意图来确定优先级。

如果默认值被省略了,那么结果将会是空串,空序列或空哈希表。如果想让默认值为0或false。

则注意不能省略它。

在不是顶层变量时,默认值操作符可以有两种使用方式:

如例:product.color!"red"

如果是这样的写法,那么在product中,当color不存在时(返回"red")将会被处理。但是如果连

product都不存在时将不会处理。也就是说这样写时变量product必须存在,否则会报错。

如果:(product.color)!"red"

这时,如果product不存在或者product存在而color不存在,都能显示默认值"red",而不会报错。

b.检测不存在的值

使用形式如:unsafe_expr??或者(unsafe_expr)??

这个操作符告诉我们一个值是否存在。基于这种情况,结果是true或false。

如例:

<#if mouse??>

Mouse found

</#else>

No mouse found

</#if>

访问非顶层变量的使用规则和默认值操作符也是一样的,即product.color??和(product.color)??。

17.括号

括号可以用来给表达式分组

如:${3*2+2} , ${3*(2+2)} , ${("green"+"mouse")?upper_case}

18.表达式中的空格

FTL忽略表达式中的多余空格

19.操作符的优先级(略)

 


分享到:
评论

相关推荐

    freemarker语法完整版

    注意在ftl文件里布尔值都是直接赋值 的如parse=true,而不是parse="true" 用例 /common/copyright.ftl 包含内容 Ftl代码 Copyright 2001-2002 ${me} All rights reserved. Copyright 2001-2002 ${me} ...

    jxl-report.jar 和 freemarker-util-0.0.1.jar

    jxl模板报表导出所需的jar包,使用该jar包可以直接在excel文档中写freemarker表达式

    FreeMarker模板引擎-其他

    几乎在任何地方都可以使用复杂表达式来指定值 命名的宏,可以具有位置参数和嵌套内容 名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突 输出转换块:在嵌套模板片段生成输出时...

    freemarker总结

    这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null值,null值和不存在的变 量完全相同. 为了处理缺失...

    FreeMark学习笔记

    表达式是FreeMarker模板的核心功能,表达式放置在插值语法${}之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker 标签结合,用于控制输出.实际上FreeMarker的表达式功能非常强大,它不仅支持直接指定值,输出...

    struts2核心jar包

    freeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具 3.commons-logging-1.1.1.jar Jakarta的通用日志记录包 4.ognl-3.0.3.jar 支持ognl表达式 5.xwork-core-2.3.1.1.jar xwork的包 由于Struts2是由xwork...

    积分java源码-ftldb:将FreeMarker模板引擎集成到Oracle数据库中

    无需编写充满引号和连接运算符的复杂字符串表达式(如您目前所做的那样),只需在您喜欢的 IDE 中编写和编译带有 FTL 宏的普通 SQL 或 PL/SQL 代码,并支持其内容/代码辅助功能。 不是 Oracle 用户? 没问题。 FTLDB...

    freemaker模板教程

    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等...

    Struts2用到的核心jar包

    Struts2用到的核心jar包: ... 在Struts2中提倡使用 freemarker模板,但实际项目中使用jsp也很多。 commons-fileupload-1.2.1.jar 用于实现文件上传功能的jar包。 使用时候将5个Struts2的核心Jar包到WEB-INF/lib/下

    超完整FreeMarker中文教程,代码

    第一部分 模板开发指南 ................................................................................................. 10 第一章 模板开发入门 ............................................................

    Struts2核心包

    freemarker-2.3.16.jar:Struts 2的UI标签的模板使用FreeMarker编写。 commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此文件。 commons-io-1.3.2.jar:IO输入输出流组件,主要完成文件的读写功能...

    Struts核心jar包精简版

    包含以下jar文件 commons-fileupload-1.2.2.jar 【文件上传相关包】 commons-io-2.0.1.jar ...freemarker-2.3.19.jar 【struts的标签模板库jar文件】 javassist-3.11.0.GA.jar 【struts对字节码的处理相关jar】

    Beetl模板引擎-其他

    Beetl相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,开发和维护模板有很好的体验。是新一代的模板引擎。总得来说,它的特性如下:1、功能完备:同主流的java模板引擎相比,Beetl具有绝大多数功能。...

    Struts2\constant应用

    该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板。 struts.configuration.xml.reload 该属性设置当struts.xml文件改变后,系统是否...

    web开发常用jar

    web开发常用jar包 常用jar包 commons-beanutils.jar Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。 commons-collections.jar Apache Commons包中的一个,包含了一些Apache开发的集合类,...

    thymeleaf_3.0.5_中文参考手册

    它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。 3. Thymeleaf 提供spring标准方言和一个与 ...

    thymeleaf_中文参考手册

    它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。 3.Thymeleaf 提供spring标准方言和一个与 ...

    Thymeleaf中文参考手册_3.0.5版

    它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。 3. Thymeleaf 提供spring标准方言和一个与 ...

    FreeMarker设计指南

    输出 (2)数据模型 (3)模板 2、数据模型 (1)基础 (2)Scalar变量 (3)hashes 、sequences和集合 (4)方法 (5)宏和变换器 (6)节点 3、模板 (1)整体结构 (2)指令...

Global site tag (gtag.js) - Google Analytics