`
dreamoftch
  • 浏览: 496821 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

freemarker

阅读更多
struts2与FreeMarker整合提供的内建变量如下:
名称 作用
stack  值栈本身, 方便使用 ${stack.findString('ognl expr')}的方式调用
action  最近执行的action
response HttpServletResponse
res 与response相同
request HttpServletRequest
req 与reqeust相同
session HttpSession
application ServletContext
base   request的上下文路径(context path)

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值

--逃逸字符
< ======== &lt;
> ======== &gt;
& ======== &amp;
" ======== &quot;
\ ======== \\
{ ======== \{
} ======== \}
\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






所有内置函数:

chunk,  is_date,  last,  root,  j_string,  round,  contains,  is_hash,  long,  float,  ends_with,  namespace,  matches,  time,  values,  seq_last_index_of,  uncap_first,  byte,  substring,  is_transform,  web_safe,  groups,  seq_contains,  is_macro,  index_of,  word_list,  int,  is_method,  eval,  parent,  xml,  number,  capitalize,  if_exists,  rtf,  node_type,  double,  is_directive,  url,  size,  default,  floor,  ceiling, is_boolean,  split,  node_name,  is_enumerable,  seq_index_of,  is_sequence,  sort,  is_node,   sort_by,  left_pad,  cap_first,  interpret,  children,  node_namespace,  chop_linebreak, date,  short,  last_index_of,  is_collection,  ancestors,  length,  trim,  datetime, is_string,  reverse,  c,  keys,  upper_case,  js_string,  has_content,  right_pad,  replace,  is_hash_ex,  new,  is_number,  lower_case,  is_indexable,  string,  exists,  html,  first 



































分享到:
评论

相关推荐

    freemarker 自定义freeMarker标签

    本篇将深入探讨如何自定义FreeMarker标签,以扩展其功能并适应特定项目需求。 首先,理解FreeMarker的默认标签语法至关重要。FreeMarker使用${...}表达式来插入变量,#{...}用于输出注释,以及、等控制结构进行条件...

    eclipse的freemarker插件

    而Freemarker则是一种轻量级的、基于模板的Java模板引擎,常用于Web应用中的动态内容生成,比如JSP替代技术。它允许开发者将业务逻辑与页面展示分离,提高代码的可维护性和可读性。 "eclipse的freemarker插件"是指...

    freemarker-2.3.23jar

    `freemarker-2.3.23.jar`是Freemarker库的一个版本,发布于2.3.23,这个版本可能包含了对早期版本的一些改进、新功能或bug修复。 Freemarker的核心概念是模板语言,它是一种声明式的编程方式,允许开发者编写不包含...

    FreeMarker

    FreeMarker的设计理念是将表现层(视图)和业务逻辑层(控制器)分离,从而实现MVC(Model-View-Controller)架构中的“View”部分。 FreeMarker的核心概念是模板文件,这是一种特殊的文本文件,其中包含可替换的...

    freemarker-2.3.31-API文档-中文版.zip

    赠送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.jar"是Freemarker库的一个具体版本,版本号为2.3.28,它是Java的一个可执行的JAR(Java Archive)文件,用于在Eclipse集成开发环境中作为插件使用。 在Freemarker的2.3.28版本中,我们可以...

    freemarker解析成pdf

    1. **创建模板**:在Freemarker中,我们需要创建一个`.ftl`(Freemarker Template Language)文件,其中包含静态文本和动态占位符。动态占位符由${}或#{}包裹,用于插入数据模型中的值。例如,`${title}&lt;/h1&gt;`会将...

    FreeMarker2.3.23官方中文文档

    2.3.23是FreeMarker的一个稳定版本,这个版本的官方中文文档提供了全面的指导和说明,帮助开发者更好地理解和使用这个模板语言。 在FreeMarker的核心概念中,它是一个基于数据驱动的模板语言。这意味着,开发者不...

    freemarker-2.3.30-API文档-中文版.zip

    赠送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区别

    ### Velocity与FreeMarker的区别 在IT领域特别是Java开发中,模板引擎是不可或缺的一部分,它们用于将数据模型转换为HTML、PDF、Word文档等格式。在众多模板引擎中,Velocity和FreeMarker是两种非常受欢迎的选择。...

    模板:velocity和freemarker的比较

    Velocity和Freemarker模板技术比较 模板技术在现代软件开发中扮演着重要角色,而在目前最流行的两种模板技术中, Velocity 和 Freemarker 独占鳌头。在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity ...

    Freemarker简介及标签详解大全

    Freemarker 简介及标签详解大全 FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写。FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。虽然 FreeMarker ...

    FreeMarker通用的分页

    FreeMarker提供了一种灵活且强大的方式来处理动态内容,尤其适用于Web开发中的视图层。在FreeMarker中实现通用的分页功能是提高Web应用程序性能和用户体验的重要一环。 ### FreeMarker通用分页知识点解析 #### 1. ...

    freemarker生成xml示例

    这个示例是关于如何使用Freemarker来生成XML文件,对于初学者来说,理解这个过程有助于掌握Freemarker的基本用法和XML的生成技巧。 在Java中,Freemarker与数据模型结合,通过模板文件生成输出。对于XML生成,首先...

    可视化div布局 生成freemarker模板

    本话题主要探讨的是如何利用可视化div布局来生成FreeMarker模板,并结合Spring MVC 3框架进行应用。下面将详细阐述这些概念及其相关知识点。 1. **FreeMarker模板引擎**:FreeMarker是一个开源的Java模板引擎,它...

    通过freemarker模板 生成PDF

    本主题将深入探讨如何利用Freemarker模板和wkhtmltox工具来实现这一功能。 **Freemarker模板** 是一个强大的Java模板引擎,用于动态生成文本输出,如HTML、XML或PDF。它支持变量替换、控制结构(如if/else)和复杂...

    freemarker Demo 适用于freemarker初学

    Freemarker是一个强大的模板引擎,常用于JavaEE应用中的视图层处理,尤其与Struts2等MVC框架配合使用,能实现灵活的动态页面渲染。这个"freemarker Demo"是一个适合初学者的示例项目,旨在帮助新接触Freemarker的...

    FreeMarker中文文档.pdf下载

    根据提供的文件信息,我们可以深入探讨FreeMarker的相关知识点及其在网页模板设计中的应用。FreeMarker是一种用Java编写的模板引擎,其主要用途在于帮助开发者高效地生成动态内容,尤其是在Web开发领域有着广泛的...

    springboot集成freemarker和shiro框架

    **SpringBoot集成Freemarker与Shiro框架详解** 在现代Web开发中,SpringBoot因其简洁、高效的特性,已经成为很多开发者的选择。而FreeMarker和Shiro则分别是常用的模板引擎和安全框架,它们能帮助我们构建出功能...

Global site tag (gtag.js) - Google Analytics