文档章节

Freemarker学习知识点(三)

不能讲的秘密
 不能讲的秘密
发布于 2017/01/24 15:58
字数 1180
阅读 10
收藏 0

#Freemarker学习知识点(三)

上一个介绍了一个Freemarker的系统指令,数量并不多。 接下来介绍它的模板和数据。

Freemarker 的使用需要由模板和数据模型共同作用,而得到输出结果。 ###什么是数据模型 其实很简单,就是能被Freemarker解析的数据。通常,我们在JAVA代码中,会实例化一个Map 对象,将所有需要使用的数据,put到map 对象中。那么,这个map对象就是数据模型了。 就如下面,有一点需要注意的是map.put 时,key必须是字符串,不能是其它类型。

	Map root=new Hashmap();
	root.put("myname", "loren.hood");
	root.put("age", 11);
	root.put("city", "ningbo");
	root.put("ismale", true);

Freemarker支持的数据类型有:

 标量:
 	字符串,例如“String is nchars"、'Foo'、 "I'm Ok"。
 	数字 100,  100.12
 	布尔值 true,false
 	日期 ,日期、时间、日期时间
 容器:
 	哈希表:{"name":"green mouse", "price":150}
 	序列:["foo", "bar", 123.45], 1..100
 子程序:
 	方法和函数
 	用户自定义指令
 其它/很少使用:
 	节点

这里能很清楚的了解Freemarker 的使用方法 直接指定值 字符串:"Foo" 或者 'Foo' 或者 "It's "quoted"" 或者 r"C:\raw\string" 数字:123.45 <#list[BR] animals as[BR] being[BR] >[BR] ${being.name} for ${being.price} Euros[BR] </#list > 布尔值:true, false 序列:["foo", "bar", 123.45], 1..100, "username"[4..] 哈希表:{"name":"green mouse", "price":150} 检索变量 顶层变量:user 从哈希表中检索数据:user.name, user[“name”] 从序列中检索:products[5] 特殊变量:.main 字符串操作 插值(或连接):"Hello ${user}!"(或"Free" + "Marker") 获取一个字符:name[0] 序列操作 连接:users + ["guest"] 序列切分:products[10..19] 或 products[5..] 哈希表操作 连接:passwords + {"joe":"secret42"} 算数运算: (x * 1.5 + 10) / 2 - y % 100 比较运算:x == y, x != y, x < y, x > y, x >= y, x <= y, x < y, 等等 逻辑操作:!registered && (firstVisit || fromEurope) 内建函数:name>upper_case 方法调用:repeat("What", 3) 处理不存在的值 默认值:name!"unknown" 或者(user.name)!"unknown" 或者name! 或者 (user.name)! 检测不存在的值:name?? 或者(user.name)??

在字符串中有很多字符是需要转义的:

转义序列 含义
" 引号(u0022)
\’ 单引号(又称为撇号)(u0027)
\\ 反斜杠(u005C)
\n 换行符(u000A)
\r 回车(u000D)
\t 水平制表符(又称为标签)(u0009)
\b 退格(u0008)
\f 换页(u000C)
\l 小于号:<
\g 大于号:>
\a 和号:&
\xCode 字符的16进制Unicode码(UCS码)

还有一种原生字符方式,书写时,在字符串前加上一个 r。 ${r"${foo}"} ${r"C:\foo\bar"}

数据模型相关的介绍到这里,下面该介绍一下使用方面的内容了。

###Freemarker的使用 从前面的一些介绍来看,大概已经知道了Freemarker是由模板和数据模型的合并处理,得到结果。 数据模板有很多类型,满足了平常的需要。也介绍了不多的系统指令,在模板文件中,就是要使用指令和插值来编写一个完整的模板文件。 模板文件中,通常会包含如下内容:

  • 指令
  • 插值表达式
  • 变量
  • 固定文本
  • 注释:其实是注释指令。

接下来,就开始编写一个 test.tpl(扩展名可以随意指定)。 插值只能在在文本区段(<h1>Hello ${name}!</h1>)和字符串文字(<#include "/footer/${company}.html">)中使用。

<#ftl> <#-- 其实这句可以省略,因为使用的就是尖括号,如果要使用[] 或 {} 那么,就应该写成 [#ftl] 或 {#ftl} -->
<#setting locale="zh_CN"> <#-- 设置语言区域,当输出数值和日期时会受到这个影响 -->
<#setting boolean_format="yes,no"> <#-- 必须指定这个,否则 ${true} 输出时会出错 -->
<#assign x=3.1415> <#-- 定义一个数值变量x -->
<#assign dev=true> <#-- 定义一个布尔变量 -->
<#assign user="Andy "> <#-- 定义一个字符串变量 -->
<html>
<body>这些都是正常的文本
    ${"直接使用固定插值"}
    <#list [x,dev,"FooBar"] as item>
        ${item_index}. ${item} <#-- 这里使用了item_index 来获得list的item的序号 -->
    </#list>    
    ${[x,dev,"FooBar"][2]}<#-- 直接使用索引得到序列的数据 -->
    <#list 1..10 as item> <#-- 直接使用序列 -->
        <#-- 使用了item的特殊变量,和 #t 指令消除首尾空白 -->
        ${item} <#if item_has_next>,</#if> <#t>         
    </#list>
    <#nt>
    ${"${user}${user}${user}"} = ${user+user+user} <#-- 这两个是相同的结果 -->
</body></html>
输出的结果是
<html>
<body>这些都是正常的文本
    直接使用固定插值
        0. 3.142 
        1. yes 
        2. FooBar 
    FooBar
     1 ,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9 ,  10      
    Andy Andy Andy  = Andy Andy Andy 
</body></html>

Freemarker的运算符

运算符组 运算符
最高优先级运算符 [subvarName][subStringRange].?(methodParams) expr! expr??
一元前缀运算符 +expr -expr !expr
乘除法,求模 * / %
加减法 + -
关系运算符 < > <= >= (相当于: lt,gt,lte,gte )
相等,不等 == (也可以是 =) !=
逻辑与 &&
逻辑或 ||
数字范围 ..

© 著作权归作者所有

不能讲的秘密
粉丝 1
博文 21
码字总数 11075
作品 0
杭州
私信 提问
FreeMarker在eclipse中的入门例子

刚接触FreeMarker时,只是简单的了解FreeMarker的一些概念及工作原理,至于如何使用FreeMarker还不是非常清楚。随着学习的深入,才渐渐对FreeMarker有了更深入的理解。本文将从基础应用着手,...

oecp
2011/05/16
650
0
FreeMarker在eclipse中的入门例子

今天海浪为大家分享一个FreeMarker在eclipse中的入门例子。 一、在eclipse中创建FreeMarker模板 在FreeMarker中模板的概念就是:包含一些由${…}包围的特殊代码的文件。这些特殊代码是FreeM...

oecp
2011/04/26
922
0
freemaker开发学习《一》

 FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.FreeMarker可以提供昜好的团队协作,对于界面开发人...

xiaml
2014/04/25
297
0
求教!对freemaker的一些不解之处、、、

本人初学freemarker,了解freemarker的基本语法,但也只知道freemarker是用来生成静态页面的模板技术。最近做了一个小例子学习了一下freemarker,效果是看到了,但还是有很多不明白的地方: ...

liujiduo
2013/06/16
730
3
分享Struts2与Freemarker的配置方法

刚才在OECP社区看到一篇文章,《Struts2与Freemarker的配置方法》觉得很好,所以转发给大家分享一下。 Freemarker是模板引擎,也可以说是一种表现层的框架,它有自己的模板指令,开发者如果不...

oecp
2011/05/16
501
0

没有更多内容

加载失败,请刷新页面

加载更多

STM32进阶之串口环形缓冲区实现

队列的概念 在此之前,我们来回顾一下队列的基本概念: 队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。 队列...

杰杰1号
2分钟前
1
0
设计模式-建造者模式

建造者模式 定义 将一个复杂对象的构建和它的表示分离,使得同样的构建过程创建出不同的表示。这句话理解起来优点抽象,我们打个简单的比方吧,中国人都喜欢做菜,做菜的时候后会放很多配料...

木本本
6分钟前
1
0
017、xml版本代码生成器配置

1、在pom.xml文件中增加mybatis-generator-maven-plugin插件 <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>......

北岩
18分钟前
2
0
用jQuery-Easy-UI编写注册页面

本文转载于:专业的前端网站➮用jQuery-Easy-UI编写注册页面 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content=......

前端老手
26分钟前
2
0
Git ssh配置

生成密钥对 ssh-keygen -t rsa -C "email@email.com"邮箱替换自己邮箱在地址C:\Users\账户\.ssh下,id_rsa、id_rsa.pub两个文件复制文件id_rsa.pub内容到github\gitlab的Settings-> SSH ......

JUKE
34分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部