- 浏览: 266950 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (187)
- spring (10)
- jquery (14)
- js (18)
- java (44)
- freemarker (7)
- 框架介绍 (1)
- tomcat (4)
- oracle (7)
- 喜欢的诗文 (4)
- linux (19)
- nokia (1)
- 那些事 (1)
- apache (3)
- dom4j (1)
- SOA (1)
- 企业架构 (2)
- baidu (1)
- svn (1)
- 测试 (4)
- liunx (0)
- memcahce (1)
- mysql (25)
- maven (4)
- 推广 (1)
- 网络 (1)
- vpn (1)
- drools (1)
- mongodb (1)
- redis (3)
- xlightweb (1)
- wifi (1)
- 学习资料 (1)
- git (1)
- 系统设计 (1)
- springboot (1)
- 自考 (0)
最新评论
-
zuo_qin_bo:
if(df==null){ //这个地方并发多的情况 ...
ThreadLocal解决dateFormat多线程错误 -
kongnan93:
好文!赞一个!!!!
jquery blockUI 居中显示 -
cxc_110928:
如果加上不能出现连续的数字或者字母 如 1234 abcd ...
用java 匹配一个数字和字母密码的正则表达式 -
wzwahl36:
http://www.atool.org/json2javab ...
JSON和JAVA的POJO的相互转换
freemarker中exist,default说明
<#if
s?exists>
${s?if_exists}
exists用在逻辑判断,而if_exists用来打印东西时用到,如果存在打印,不存在打印空字符串.
exp1?exists将会被exp1??代替
exp1?if_exists将会被exp1!代替
exp1?default(exp2)将会被exp1!exp2.
FTL区分大小写,所以list是正确的FTL指令,而List不是;${name}和${NAME}是不同的
如果使用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错误消息
FreeMarker会忽略FTL标记中的空白字符,
但是,<、</和指令之间不允许有空白字符
局部变量隐藏(而不是覆盖)同名的plain变量;循环变量隐藏同名的局部变量和plain变量
==================序列=================
序列:由逗号分隔的子变量列表,由方括号限定,索引从0开始
例如: <#list ["winter", "spring", "summer", "autumn"]
as x>
${x}
</#list>
可以使用数字范围定义数字序列,例如2..5等同于[2, 3, 4,
5],但是更有效率,注意数字范围没有方括号,可以定义反递增的数字范围,如5..2
序列片断:使用[startIndex..endIndex]语法,从序列中获得序列片断(也是序列);startIndex和endIndex是结果为数字的表达式
=====. 子串 ===============================
假设user的值为”tom cat”
${user[0]}${user[4]} ? tc
${user[1..4]} ? om c
===================散列=================
散列(hash):由逗号分隔的键/值列表,由大括号限定,键和值之间用冒号分隔
例如:{"name":"green mouse", "price":150}
键和值都是表达式,但是键必须是字符串
${..}只能用于文本部分,下面的代码是错误的:
<#if
${isBig}>Wow!</#if>
<#if
"${isBig}">Wow!</#if>
应该写成:
<#if
isBig>Wow!</#if>
====================算术运算=============
+、-、×、/、%,下面是一个例子:
avg 求平均值
${avg(3,5,20)}
${avg(student.zhangyaang.age,student.situ.age)}
${x * x - 100}
${x / 2}
${12 % 10}
操作符两边必须是数字,因此下面的代码是错误的:
${3 * "5"} <#-- WRONG!
-->
使用+操作符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串,例如:
${3 + "5"}
输出结果是:
35
使用内建的int(后面讲述)获得整数部分,例如:
${(x/2)?int} 输出结果是(假设x为5)2
=================== 比较操作符=============
使用=(或==,完全相等)测试两个值是否相等,使用!=测试两个值是否不相等
=和!=两边必须是相同类型的值,否则会产生错误,例如<#if 1 =
"1">会引起错误
Freemarker是精确比较,所以对"x"、"x "和"X"是不相等的
对数字和日期可以使用<、<=、>和>=,但不能用于字符串
由于Freemarker会将>解释成FTL标记的结束字符,所以对于>和>=可以使用括号来避免这种情况,例如<#if
(x > y)>
另一种替代的方法是,使用lt、lte、gt和gte来替代<、<=、>和>=
===================逻辑操作符===============
&&(and)、||(or)、!(not),只能用于布尔值,否则会产生错误
================== 内建函数=================
内建函数的用法类似访问散列的子变量,只是使用“?”替代“.”,下面列出常用的一些函数
---------------字符串使用的:
html:对字符串进行HTML编码
cap_first:使字符串第一个字母大写
lower_case:将字符串转换成小写
upper_case:将字符串转换成大写
trim:去掉字符串前后的空白字符
-------------序列使用的:
size:获得序列中元素的数目
-------------数字使用的:
int:取得数字的整数部分(如-1.9?int的结果是-1)
=======================操作符优先顺序==============
操作符组 操作符
后缀 [subvarName] [subStringRange].
(methodParams)
一元 +expr、-expr、!
内建 ?
乘法 *、 / 、%
加法 +、-
关系 <、>、<=、>=(lt、lte、gt、gte)
相等 ==(=)、!=
逻辑and &&
逻辑or ||
数字范围 ..
====================插值 Interpolation=============
Interpolation有两种类型:
通用Interpolation:${expr}
数字Interpolation:#{expr}或#{expr; format}
注意:Interpolation只能用于文本部分
通用Interpolation ,插入字符串值:直接输出表达式结果
插入数字值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string格式化单个Interpolation
例如:
<#setting
number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string} <#-- the same as
${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
输出结果是:
$42.00
$42.00
42
$42.00
4,200%
插入日期值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string格式化单个Interpolation
例如:
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
${lastUpdated?string("EEE, MMM d, ''yy")}
插入布尔值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string格式化单个Interpolation
例如:
<#assign foo=true/>
${foo?string("yes", "no")}
输出:yes
数字Interpolation的#{expr; format}形式可以用来格式化数字,format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
例如:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#--
2.58 -->
#{y; M2} <#--
4
-->
===============string============
--截取字符串
exp?substring(from,toExclusive)
exp?substring(from)
--第一个单词的首字母大写
exp?cap_first
例如:${"greEN mouse"?cap_first} 输出:GreEN mouse
--取消第一个单词的首字母大写
exp?uncap_first
--所有单词的首字母大写
capitalize
例如: ${" green
mouse"?capitalize} 输出: Green Mouse
--字符串转换成日期时间值
date, time, datetime
例如:
<#assign test1 =
"10/25/1995"?date("MM/dd/yyyy")>
<#assign test2 =
"15:05:30"?time("HH:mm:ss")>
<#assign test3 = "1995-10-25 03:05
PM"?datetime("yyyy-MM-dd hh:mm a")>
${test1}
${test2}
${test3}
输出:
Oct 25, 1995
3:05:30 PM
Oct 25, 1995 3:05:00 PM
也可以不带格式化参数,将按照默认的格式显示
例如:<#assign test1 = "Oct 25,
1995"?date>
<#assign test2 = "3:05:30
PM"?time>
<#assign test3 = "Oct 25, 1995 03:05:00
PM"?datetime>
--判断字符串以什么字符串结束
ends_with 返回Boolean值
例如:"redhead"?ends_with("head") 返回:true
--判断字符串以什么字符串开始
starts_with 返回Boolean值
--逃逸字符
< ======== <
> ======== >
& ======== &
" ======== "
\ ======== \\
{ ======== \{
} ======== \}
\n 换行(u000A)
\r Return (u000D)
\t Tab (u0009)
\b Backspace (u0008)
\f Form feed (u000C)
\l <
\g >
\a &
--获取字符串在字符串中的下标索引,索引值从0开始
index_of
例如:"abcabc"?index_of("bc")
输出:1
"abcabc"?index_of("bc",2)
输出:4
--取最后匹配的字符串的索引
last_index_of
例如:"abcabc"?last_index_of("ab") 输出:3
"abcabc"?last_index_of("ab", 2) 输出:0
--根据java语言的转义字符串规则转义字符串
j_string
例如:<#assign beanName = 'The "foo"
bean.'>
String BEAN_NAME = "${beanName?j_string}";
输出:String BEAN_NAME = "The \"foo\" bean.";
--根据javascript语言的转义字符串规则转义字符串
js_string
例如:
<#assign user = "Big Joe's \"right
hand\"">
<script>
alert("Welcome ${user?js_string}!");
</script>
输出:
<script>
alert("Welcome Big Joe\'s \"right
hand\"!");
</script>
--取字符串的长度
length
--将字符串转换成小写
lower_case
例如:"GrEeN MoUsE"?lower_case 输出:"green mouse"
--将字符串转换成大写
upper_case
--左补齐
left_pad 补齐的长度大于等于number
例如:
[${""?left_pad(5)}]
[${"a"?left_pad(5)}]
[${"abcdefg"?left_pad(5)}]
输出:
[
]
[ a]
[abcdefg]
[abcdefg]
可以指定补齐的字符
[${"a"?left_pad(5, "-")}]
输出:[----a]
--右补齐
right_pad
--判断是否包含某个字符串
contains
例如:<#if "piceous"?contains("ice")>It
contains "ice"</#if>
输出:
It contains "ice"
--匹配正则表达式
matches 返回boolean值
例如:"fooo"?matches('fo*') 返回:true
--字符串转换成数字
number
--替换字符串
replace
例如:
${"this is a car acarus"?replace("car",
"bulldozer")}
输出:this is a bulldozer abulldozerus
--字符串拆分
split
例如:
<#list "someMOOtestMOOtext"?split("MOO") as
x>
- ${x}
</#list>
输出:
- some
- test
- text
--去除前后的空格
trim
例如: (${" green mouse
"?trim}) 输出:(green mouse)
--word_list
例如:
<#assign words =
" a bcd,
.
1-2-3"?word_list>
<#list words as
word>[${word}]</#list>
输出:[a][bcd,][.][1-2-3]
==================数字=====================
将数字转换成字符串
string
例如: <#assign answer=42/>
${answer}
${answer?string} <#-- the same as
${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
输出:
42
42
42
$42.00
4,200%
================日期时间=================
将日期时间转换成指定格式的字符串
string
例如:
${openingTime?string.short}
${openingTime?string.medium}
${openingTime?string.long}
${openingTime?string.full}
输出:
12:45 PM
12:45:09 PM
12:45:09 PM CEST
12:45:09 PM CEST
备注:date(年月日), time(时间), datetime(年月日+时间)
==============booleans ==================
将逻辑boolean值转换成字符串
string
例如:foo?string 输出:"true"
foo?string("yes", "no") 输出:"yes"
================序列 sequences=============
--取序列的第一个变量
first 如果序列为空将报错
--取序列的最后一个变量
last 如果序列为空将报错
--序列中是否包含某个变量
seq_contains
例如:<#assign x = ["red", 16, "blue",
"cyan"]>
"blue": ${x?seq_contains("blue")?string("yes", "no")}
输出:"blue": yes
--取变量在序列中首次出现的索引值
seq_index_of
例如:
<#assign colors = ["red", "green",
"blue"]>
${colors?seq_index_of("blue")}
输出:2
--取变量在序列中末次出现的索引值
seq_last_index_of
--序列顺序翻转
reverse
--返回序列的大小
size
--升序排列序列
sort
例如:<#assign ls = ["whale", "Barbara", "zeppelin",
"aardvark", "beetroot"]?sort>
<#list ls as i>${i}
</#list>
输出:aardvark Barbara beetroot whale zeppelin
--按照关键字升序排列序列
sort_by
例如:
<#assign ls = [
{"name":"whale", "weight":2000},
{"name":"Barbara", "weight":53},
{"name":"zeppelin", "weight":-200},
{"name":"aardvark", "weight":30},
{"name":"beetroot", "weight":0.3}
]>
Order by name:
<#list ls?sort_by("name") as i>
- ${i.name}: ${i.weight}
</#list>
Order by weight:
<#list ls?sort_by("weight") as
i>
- ${i.name}: ${i.weight}
</#list>
--将序列分成多组
chunk
例如:
<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j']>
<#list seq?chunk(4) as row>
<#list row as
cell>${cell}
</#list>
</#list>
<#list seq?chunk(4, '-') as
row>
<#list row as
cell>${cell}
</#list>
</#list>
输出:
a b c d
e f g h
i j
a b c d
e f g h
i j - -
==================== hashes==========
keys--取关键字
例如:
<#assign h = {"name":"mouse",
"price":50}>
<#assign keys = h?keys>
<#list keys as key>${key} =
${h[key]};
</#list>
输出:
name = mouse; price = 50;
values--取value值
=====================其他插件方法=======
--表达式运算
eval
例如:"1+2"?eval 输出:3
--判断变量的类型
Built-in Returns true if the value is a ...
is_string string
is_number number
is_boolean boolean
is_date date (all types: date-only,
time-only and date-time)
is_method method
is_transform transform
is_macro macro
is_hash hash
is_hash_ex extended hash (i.e. supports ?keys and
?values)
is_sequence sequence
is_collection collection
is_enumerable sequence or collection
is_indexable sequence
is_directive macro or transform
is_node node
##################指令参考################
===============if, else, elseif===========
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
...
<#else>
...
</#if>
================switch, case, default, break===========
<#switch value>
<#case
refValue1>
...
<#break>
<#case
refValue2>
...
<#break>
...
<#case
refValueN>
...
<#break>
<#default>
...
</#switch>
=================list, break======================
<#list sequence as item>
...
</#list>
<#list seq as x>
${x}
<#if x =
"spring"><#break></#if>
</#list>
<#list students[0..5] as s_list></#list>取list的前5条记录
list项的索引 xxx_index 索引值从0开始
判断是否有下一项 xxx_has_next
例如:
<#assign seq = ["winter", "spring", "summer",
"autumn"]>
<#list seq as x>
${x_index + 1}. ${x}<#if
x_has_next>,</#if>
</#list>
输出:
1. winter,
2. spring,
3. summer,
4. autumn
=====================include=================
<#include filename>
or
<#include filename options>
options:含两项encoding=encoding, parse=parse
encoding 编码字符串 parse 是否解析模板
=====================import=================
<#import path as hash>
===============noparse===================
<#noparse>
...
</#noparse>
不解析某段文字
例如:
<#noparse>
<#list animals as
being>
<tr><td>${being.name}<td>${being.price}
Euros
</#list>
</#noparse>
输出:
<#list animals as being>
<tr><td>${being.name}<td>${being.price}
Euros
</#list>
=======================compress=====================
<#compress>
...
</#compress>
去掉多余的空格和换行
例如:
<#assign x =
"
moo \n\n
">
(<#compress>
1 2
3
4 5
${moo}
test only
I said, test only
</#compress>)
输出:
(1 2 3 4 5
moo
test only
I said, test only)
=====================定义变量 给变量赋值 assign=========
<#assign name=value>
or
<#assign name1=value1 name2=value2 ...
nameN=valueN>
or
<#assign same as above... in
namespacehash>
or
<#assign name>
capture this
</#assign>
or
<#assign name in namespacehash>
capture this
</#assign>
==============定义全局变量 赋值 global===========
<#global name=value>
or
<#global name1=value1 name2=value2 ...
nameN=valueN>
or
<#global name>
capture this
</#global>
===============setting 设置freemarker的系统变量=================
<#setting name=value>
===================去除空格============
<#t> <#lt> <#rt> <#nt>
成对使用 类似 trim方法
##################freemarker中的保留字###################
true: boolean value ``true''
false: boolean value ``false''
gt: comparison operator ``greater than''
gte: comparison operator ``greater than or equivalent''
lt: comparison operator ``less than''
lte: comparison operator ``less than or equivalent''
as: used by a few directives
in: used by a few directives
using: used by a few directives
========================注释comment=============
旧格式:<#--...-->
新格式:
<#comment>
.........</#comment>
=====================循环foreach===============
<#foreach item in sequence>
类似于:<#list sequence as item>.
==================默认值default===================
exp1?default(exp2)
类似于原来的 exp1!exp2
===============判断变量是否存在exists if_exists==============
exists 老版本中 (exp1)?exists
if_exists 新版本中 (exp1)?if_exists
发表评论
-
freemarker 根据模板生成内容
2013-08-01 13:48 859package com.froad.openapi.comm ... -
格式化银行帐号,四位加空格
2012-06-27 16:21 1755<#-- * 隐藏银行帐号 --> ... -
freemarker操作字符串,数字,布尔类型函数
2012-05-24 01:09 25635操作字符串函数 1. su ... -
freemarker 去除html,空格标记
2012-05-24 01:07 2068<#assign summary=summary?rep ... -
freemarker 自定义函数
2012-05-22 13:03 2059dataDic.ftl <#macro dicMapS ... -
freemarker 中引用jsp标签 输出当前日期
2012-05-21 18:19 2321<#global fundtradeTag=JspTag ...
相关推荐
本篇将深入探讨如何自定义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则分别是常用的模板引擎和安全框架,它们能帮助我们构建出功能...