freemarker
hqmln
这个作者很懒,什么都没留下…
展开
-
数据模型
基础在快速入门中介绍了在模板中使用的三种基本对象类型:scalars、hashes 和sequences,其实还可以有其它更多的能力:scalars:存储单值hashes:充当其它对象的容器,每个都关联一个唯一的查询名字sequences:充当其它对象的容器,按次序访问方法:通过传递的参数进行计算,以新对象返回结果用户自定义FTL标记:宏和变换器通常每个变量只具...原创 2014-12-25 15:45:31 · 62 阅读 · 0 评论 -
内置函数
1.hashmap内建函数values和keys来枚举哈希表中的子变量1.1keys 键的集合<#assign h = {"name":"mouse", "price":50}><#assign keys = h?keys><#list keys as key>${key} = ${h[key]}; </#list>原创 2015-01-16 14:55:55 · 142 阅读 · 0 评论 -
freemarker的变量
简单变量:它能从模板中的任何位置来访问,或者从使用include指令引入的模板访问。可以使用assign或macro指令来创建或替换这些变量。局部变量:它们只能被设置在宏定义体内,而且只在宏内可见。一个局部变量的生存周期只是宏的调用过程。可以使用local指令在宏定义体内创建或替换局部变量。循环变量:循环变量是由指令(如list)自动创建的,而且它们只在指令的开始和结束标记内有效。宏...原创 2015-01-13 09:48:24 · 231 阅读 · 0 评论 -
命名空间
import指令不仅仅创建命名空间,而且要通过import的调用者(本例中的主命名空间)创建一个新的哈希表变量,这就成为进入新的命名空间的大门。<#import "/lib/my_test.ftl" as my><#-- 被称为"my"的哈希表就会是那个"大门" --><@my.copyright date="1999-2002"/&g原创 2015-01-13 09:48:11 · 83 阅读 · 0 评论 -
空白处理
FreeMarker提供下面的工具来处理这个问题: 忽略某些模板文件的空白的工具(解析阶段空白就被移除了): 剥离空白:这个特性会自动忽略在FTL标签周围多余的空白。这个特性可以通过模板来随时使用和禁用。 微调指令:t,rt和lt,使用这些指令可以明确地告诉FreeMarker去忽略某些空白。可以阅读参考手册来获取更多信息。 FTL参数strip_text:这将从模板中...原创 2015-01-13 09:47:52 · 171 阅读 · 0 评论 -
处理不存在的值
使用形式概览:unsafe_expr??或(unsafe_expr)??要注意这个操作是FreeMarker 2.3.7版本以后才有的(用来代替内建函数default,exists和if_exists)原创 2015-01-12 10:50:10 · 121 阅读 · 0 评论 -
默认值
使用形式概览:unsafe_expr!default_expr或unsafe_expr!或(unsafe_expr)!default_expr或(unsafe_expr)! 默认值可以是任何类型的表达式,也可以不必是字符串。你也可以这么写:hits!0或colors!["red", "green", "blue"]。默认值表达式的复杂程度没有严格限制,你还可以这么来写:cargo.we...原创 2015-01-12 10:49:11 · 349 阅读 · 0 评论 -
插值${}使用
插值的使用语法是:${expression},expression可以是所有种类的表达式(比如${100 + x})。插值是用来给插入具体值然后转换为文本(字符串)。插值仅仅可以在两种位置使用:文本区(如<h1>Hello ${name}!</h1>)和字符串表达式(如<#include "/footer/${company}.html">)中。插值...原创 2015-01-12 10:48:53 · 632 阅读 · 0 评论 -
内建函数
内建函数提供始终可用的内置功能。内建函数以?形式提供变量的不同形式或者其他信息。使用内建函数的语法和访问哈希表子变量的语法很像,除了使用?号来代替点,其他的都一样。例如:得到字符串的大写形式:user?upper_case字符串使用的内建函数 html: 字符串中所有的特殊HTML字符都需要用实体引用来代替(比如<代替&lt;)。cap_first:字符串...原创 2015-01-12 10:48:20 · 80 阅读 · 0 评论 -
自定义指令macro
宏参数的真实值是可以作为变量(person)放在宏定义体中的。使用预定义指令时,参数的值(=号后边的值)可以是FTL表达式。这样,不像HTML,"Fred"和"Batman"的引号就可以不用要了。<@greet person=Fred/>也意味着使用变量的值Fred作为person参数,而不是字符串"Fred"。当然参数值并不一定是字符串类型,也可以是数字,布尔值,哈希表,序列等…...原创 2015-01-09 16:49:29 · 254 阅读 · 0 评论 -
关系运算符
算数运算减法:-乘法:*除法:/求模(求余):%比较运算==!=对数字和日期类型的比较,也可以使用<,<=,>=和>逻辑操作逻辑或:||逻辑与:&& 逻辑非:!逻辑操作符仅仅在布尔值之间有效,若用在其他类型将会产生错误导致模板执行中止。...原创 2015-01-06 18:34:40 · 114 阅读 · 0 评论 -
序列list
指定一个文字的序列,使用逗号来分隔其中的每个子变量,然后把整个列表放到方括号中。例如:<#list ["winter", "spring", "summer", "autumn"] as x>${x}</#list> 列表中的项目是表达式,那么也可以这样做:[2 + 2, [1, 2, 3, 4], "whatnot"],其中第一个子变原创 2015-01-06 18:18:17 · 97 阅读 · 0 评论 -
字符串
在文本中确定字符串值的方法是看引号和单引号,比如"some text"或'some text',这两种形式是相等的。如果文本本身包含用于字符引用的引号(双引号”或单引号’)或反斜杠时,应该在它们的前面再加一个反斜杠,这就是转义 一种特殊的字符串就是原生字符串。在原生字符串中,反斜杠和${没有特殊的含义,它们被视为普通的字符。为了表明字符串是原生字符串,在开始的引号或单引号之前放置字母r...原创 2015-01-06 18:15:29 · 86 阅读 · 0 评论 -
方法、函数和宏指令
方法和函数有什么区别呢?方法是来自于数据模型(它们反射了Java对象的方法),而函数是定义在模板内的但二者可以用同一种方式来使用 自定义指令而不要用函数/方法。指令的特征如下: 输出(返回值)的是标记(HTML,XML等)。主要原因是函数的返回结果可以自动进行XML转义(这是因为${…}的特性),而用户自定义指令的输出则不是(这是因为<@...>的特性所致,它的输...原创 2015-01-06 17:55:23 · 515 阅读 · 0 评论 -
freemarker判断json为空
product的内容为{} <#if article.product?? && article.product!="{}"> ${(article.product.sourceOfPrice)!} <#else> 面议 </#if> ...原创 2015-01-03 18:00:28 · 596 阅读 · 0 评论 -
freemarker解析json数组
其中imgs数据为[{url:'aaa'},{url:'bbbbb'}] <#assign text>${imgs}</#assign> <#assign json=text?eval /> <#list json as item> <img width="30" height="30" src="${item原创 2015-01-02 21:31:26 · 3936 阅读 · 0 评论 -
处理不存在的变量或null
一个不存在的变量和一个是null的变量,对于FreeMarker来说是一样的不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况,通过在变量名后面跟着一个!和默认值。就像下面的例子,当user从数据模型中丢失时,模板将会将user的值表示为字符串”Anonymous” <h1>Welcome ${user!"Anonymous"}!</h1> ...原创 2014-12-25 16:41:19 · 121 阅读 · 0 评论 -
标签、指令和注释
FTL tags标签(FreeMarker 模板的语言标签):FTL标签和HTML标签有一点相似,但是它们是FreeMarker的指令而且是不会直接输出出来的东西。这些标签的使用一般以符号#开头。用户自定义的FTL标签使用@符号来代替# Comments注释:FreeMarker的注释和HTML的注释相似,但是它用<#--和-->来分隔的。任何介于这两个分隔符(包含分隔...原创 2014-12-25 16:24:50 · 191 阅读 · 0 评论 -
FTL中的保留名称
下面的这些名称不能在非方括号语法中被用作顶层变量(比如vars["in"]),因为这是FTL中的关键字。 true:布尔值“true” false:布尔值“false” gt:比较运算符“大于” gte:比较运算符“大于或等于” lt:比较运算符“小于” lte:比较运算符“小于或等于” as:由少数指令使用 in:由少数指令使用 using...原创 2015-01-16 16:41:43 · 109 阅读 · 0 评论