一.FreeMarker简介:
 ? ?1.FreeMarker是一个模板引擎,一个基于模板生成HTML/XML/RTF/Java源代码等等的通用工具,使用纯Java编写
 ? ?2.FreeMarker与容器无关,因为它并不知道HTTP或Servlet,也可以在FreeMarker模板中使用JSP标记库 //支持JSP标记库
 ? ?3.FreeMarker是一个轻量级组件(易于嵌入到产品中),不需要Servlet环境
 ? ?4.可以在FreeMarker模板中清楚和直觉地访问XML对象模型 //如:用<#recurse>和<#visit>指令(2.3版本)结构递归遍历XML树
 ? ?5.FreeMarker页面的扩展/后缀名为.ftl
 二.FreeMarker中的指令语法:
 ? ? ftl页面支持所有Html标记和js、css语法,ftl指令区分大小写,ftl页面中的<script>中也可使用ftl指令
 ? ?注:ftl中可以使用内置函数操作/维护与Java后台程序无关的string、list和map等,如:通过索引访问list元素、获得子list、合并list、对list排序,通过key变量访问map元素
 ? ?? ?、检查map是否为空、获得key或值的list
 ? ?1.ftl中判断对象/字符串是否为null:
 ? ???在<#if>指令中用Object或String?exists判断,在${}指令中用Object或String?if_exists输出布尔形式判断
 ? ?2.ftl中对字符串的处理
 ? ???${String?string("yyyy-MM-dd HH:mm:ss zzzz")/("EEE,MMM d,''yy")/("EEEE,MMMM dd,yyyy,hh:mm:ss a '('zzz')'")} //日期格式化
 ? ???${String?substring(startIndex,endIndex)} //截取字符串,还可以用更简单的${String[0..number]}
 ? ???${String?split("*")} //用指定的分隔符将字符串拆分成数组
 ? ???${String?replace("字符串中指定的子串","替换后的子串"[,"规则参数"])} //将字符串中的子串从左到右替换为指定的子串,规则参数有:i、r、m、s、c、f,具体含义如下:
 ? ? ? ? i:不区分大小写
 ? ? ? ? f:只替换第一个出现被替换字符串的字符串
 ? ? ? ? r:表示第二个参数(替换后的子串)是正则表达式
 ? ? ? ? m:
 ? ? ? ? s:
 ? ? ? ? c:
 ? ???${String?length} //获取字符串长度
 ? ???${String?trim} //字符串去空格
 ? ???${String?upper_case} //将字母字符串转为大写
 ? ???${String?capitalize} //将字母字符串的每个单词的首字母转为大写
 ? ???${String?lower_case} //将字母字符串转为小写
 ? ???${String?cap_first} //将字符串中的第一个字符转为大写
 ? ???${String?uncap_first} //将字符串中的第一个字符转为小写
 ? ???${String?ends_with("str")} //判断字符串是否以指定子串结尾/返回布尔值
 ? ???${String?index_of("查找的子串"[,开始查找的索引])} //在字符串中查找子串第一次出现处的索引,没有找到则返回-1
 ? ???${String?contains("str")} //判断字符串中是否包含子串,返回布尔值
 ? ???${String?number} //将字符串转为数字
 ? ???${bool?string("yes/是","no/否")} //布尔值格式化
 ? ?3.ftl中对整型的处理:
 ? ???#{int?c} //将数字转为字符串,还可用#{int?string}
 ? ???#{int?string.currency} //将数字转为货币(¥)形式,还可用#{int?string("currency")}
 ? ???#{int?string.percent} //将数字转为百分比(%)形式,还可用${int?string("percent")}
 ? ???数字格式化:#{变量;format},其中format可以是:mn:小数部分最少n位,Mn:小数部分最多n位;如:
 ? ? ? ? <#assign a=2.582/>,<#assign b=4/>
 ? ? ? ? #{a;M2} //输出2.58
 ? ? ? ? #{a;m2} //输出2.58
 ? ? ? ? #{b;m2} //输出4.00
 ? ? ? ? #{a;m1M2} //输出2.58
 ? ? ? ? #{b;m1M2} //输出4.0
 ? ?4.ftl中的控制结构:
 ? ???(1).<#if>、<#else>/<#else if>、</#if>
 ? ?? ?? ?判断对象是否为空:?exists
 ? ?? ?? ?判断变量是否为空:?if_exists
 ? ?? ?? ?判断集合/数组中是否有数据:?has_content
 ? ???(2).switch结构:
 ? ? ? ???<#switch 变量>
 ? ? ? ?? ? <#case value>...<#break>
 ? ? ? ?? ? <#case value>...<#break>
 ? ? ? ?? ? <#default>...<#break>
 ? ? ? ???</#switch>
 ? ?5.ftl中的循环结构:<#list 4个范围内的集合/数组 as 遍历的集合/数组中的对象的别名>循环体</#list> //ftl中的循环也支持break子句
 ? ???获取集合的当前循环索引:集合的别名_index
 ? ???判断是否达到最后一次循环:集合的别名_has_next //返回true/false
 ? ???注:ftl中可以使用类似[i]语法的索引方式访问集合/数组中的元素、可以在循环外访问循环体内的控制变量
 ? ?6.ftl访问集合/数组:
 ? ???集合对象?first //获取集合中的第一个值
 ? ???集合对象?last??//获取集合中的最后一个值
 ? ???集合对象?reverse //将集合中的顺序反转(即倒序排序)
 ? ???集合对象?size //获取集合中的元素个数
 ? ???集合对象?sort //将集合中的对象转化为字符串后顺序排序
 ? ???集合对象?sort_by(value) //按集合中对象的属性value进行排序
 ? ?7.ftl访问Hash:
 ? ???hash对象?keys //返回hash中的所有key,返回结果为集合
 ? ???hash对象?values //返回hash中的所有value,返回结果为sequence
 ? ?8.ftl中定义变量:
 ? ???(1).使用<#assign 变量名="值">指令定义局部变量 //用于在页面创建或替换一个变量(当前ftl范围内/page范围内的变量声明,在宏定义体中有效)
 ? ???(2).plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,
 ? ???(3).使用local指令创建和替换
 ? ?9.ftl中的运算符:
 ? ???比较运算符可以用gt、gte、、lt、lte、或>、>=、==、<、<=、!= //不推荐使用后者(因为麻烦),因为Freemarker会将>解释成FTL标记的结束字符,故对于>和>=要用括号括起来(如:& lt;#if (x>y)>)
 ? ???算术运算符:+、-、*、/、%
 ? ???逻辑操作符:&&:and、||:or、!:not //只能用于布尔值
 ? ?<#recurse>和<#visit>指令 //递归遍历XML树,访问XML对象模型
 ? ?10.import指令:用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中
 ? ???<#import "/lib/common.ftl" as com> //此处将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中
 ? ?11.include指令:用于包含指定页面(类似JSP的包含指令,如:<#include "/common/copyright.ftl" encoding="GBK">)
 ? ?12.setting指令:用来设置ftl使用的环境,如:<#setting locale="en_US">
 ? ?13.ftl中的宏:宏相当于程序中的函数,可以传参,可以调用宏以执行宏体内的内容,在那里调用宏宏体中的内容就相当于写在那里。以便在模板中通过用户定义指令使用该变量
 ? ?? ?(1).宏的定义:用macro指令定义,如:<#macro 宏名 [宏的输入参数名 ...(可选)]>Hello Joe!</#macro> //创建时可带多个参数,可在定义时指定参数的缺省值,否则在调用宏
 ? ? ? ?? ? 时必须对所有参数赋值,宏的参数只在宏范围中有效,在宏体中使用宏中的参数用${参数名}
 ? ?? ?(2).宏的调用:使用@表示调用宏,可以是双标签也可以是单标签,如:<@宏名 [宏的输入参数名="值" ...(可选,当宏定义中带参时这里才有参数)]></@宏名> //宏调用中可嵌套
 ? ? ? ?? ?调用其它宏,调用的同时给多个参数赋值,如果在定义时指定了参数的缺省值则在调用时可以不用给参数赋值,否则必须对所有参数赋值
 ? ?? ?(3).宏嵌套html/其它内容:宏嵌套html/其它内容使用<#nested>指令,在宏定义/体中用<#nested>指令将调用宏时的html/其它内容嵌套到<#nested>指令所在的位置,调用宏时
 ? ? ? ?? ?在调用宏体中输入html/其它内容即可嵌套到宏体中,如:
 ? ? ? ?? ???定义时加入<#nested>指令将嵌套内容加入到<#nested>指令处:<#macro 宏名>
? ? ? ? ? ? ? ? ?<table border=4 cellspacing=0 cellpadding=4><tr><td>
? ? ? ? ? ? ? ? ? ?<#nested>
? ? ? ? ? ? ? ? ? ? ? ? ? ? </tr></td></table>
? ? ? ? ? ? ? ? ? ? ?</#macro>
 ? ?? ?? ?? ?调用时在调用宏体中加入要嵌套的内容:<@宏名>嵌套内容</@宏名>,输出:<table border=4 cellspacing=0 cellpadding=4><tr><td>嵌套内容</tr></td>< /table>
 ? ?n.ftl中的其它用法:
 ? ???取值:${4个范围内的非int型的任意对象},#{4个范围内的int型变量}
 ? ???ftl中调用对象或action中的方法
 ? ?? ? 使用${对象.方法}调用对象的方法
 ? ?? ? 使用${action.方法名}调用当前action中的方法
 ? ???支持其它语言一样的转义序列:\g:大于号、\l:小于号、\":双引号、\':单引号、\\:反斜杠、\n:换行、\r:Return、\t:Tab(制表符)、\b:Backspace(退格)、\f:Form feed、\a:&、\{:{
 ? ???注释使用<#-- 注释内容 -->
  详细解决方案
                freemarker 基础文法学习笔记
热度:1218   发布时间:2013-07-20 11:07:48.0
                    相关解决方案
                
                - freemarker 多个list嵌套运用
- freemarker 语法相干!
- Struts2+Spring+JPA+FREEMARKER 登录程序异常
- 哪位高手能 帮小弟我在小弟我的电脑下 一个 做 freemarker 案例
- Struts2 标签 跟 freemarker
- freemarker 变量施用
- freemarker
- FreeMarker 生成静态html(举例来说)
- freemarker 除开html,空格标记
- Freemarker 之 Java静态化 范例一
- freemarker 基础文法学习笔记
- FreeMarker 经典入门例证
- freemarker list (长度,遍历,上标,嵌套,排序)
- freemarker 数目字,字符的操作
- FreeMarker 真实案例使用
- Freemarker 数目字格式化
- FreeMarker 事例
- Freemarker 中Request Attribute取值异常
- freemarker 数目字分隔符 double型去掉逗号
- freemarker 循环地图
- FreeMarker Web 使用
- FreeMarker.properties里头的属性
- FreeMarker 对null值的处置技巧
- FreeMarker macro(宏)的应用
- struts-webapp-freemarker-2.3.16 官方 examples
- Freemarker 学习札记
- freemarker 传过来的替空
- freemarker 快速入门 杂项二
- freemarker 快速入门二
- freemarker 快速入门 杂项三