FreeMarker惯用内置函数

1.sequence?first 返回sequence的第一个值。

2.sequence?last 返回sequence的最后一个值。

3.sequence?reverse 将sequence的现有顺序反转,即倒序排序

4.sequence?size 返回sequence的大小

5.sequence?sort 将sequence中的对象转化为字符串后顺序排序

6.sequence?sort_by(value) 按sequence中对象的属性value进行排序

注意:Sequence不能为null

<span style="color:#FF0000;">二、Hash的内置函数</span>

1.hash?keys 返回hash里的所有key,返回结果为sequence

2.hash?values 返回hash里的所有value,返回结果为sequence
<span style="color:#FF0000;">
三、操作字符串函数</span>

1.substring(start,end)从一个字符串中截取子串

start:截取子串开始的索引,start必须大于等于0,小于等于end

end: 截取子串的长度,end必须大于等于0,小于等于字符串长度,如果省略该参数,默认为字符串长度。

2.cap_first 将字符串中的第一个单词的首字母变为大写。

3.uncap_first将字符串中的第一个单词的首字母变为小写。

4.capitalize将字符串中的所有单词的首字母变为大写

5.date,time,datetime将字符串转换为日期

注意:如果指定的字符串格式不正确将引发错误

6.ends_with 判断某个字符串是否由某个子串结尾,返回布尔值

注意:布尔值必须转换为字符串才能输出

7.html 用于将字符串中的<、>、&和"替换为对应得<>":&

8.index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。

Start参数用于指定从字符串的那个索引处开始搜索,start为数字值。

如果start大于字符串长度,则start取值等于字符串长度,如果start小于0,则start取值为0。

9.length返回字符串的长度

10.lower_case将字符串转为小写

11.upper_case将字符串转为大写

12.contains 判断字符中是否包含某个子串。返回布尔值

注意:布尔值必须转换为字符串才能输出

13.number将字符串转换为数字

14.replace用于将字符串中的一部分从左到右替换为另外的字符串。

15.split使用指定的分隔符将一个字符串拆分为一组字符串

16.trim 删除字符串首尾空格

<span style="color:#FF0000;">四、操作数字</span>

1.c 用于将数字转换为字符串

2.string用于将数字转换为字符串

Freemarker中预订义了三种数字格式:number,currency(货币)和percent(百分比)其中number为默认的数字格式转换

<span style="color:#FF0000;">五操作布尔值
</span>
string 用于将布尔值转换为字符串输出

true转为"true",false转换为"false"

foo?string("yes","no")如果布尔值是true,那么返回"yes",否则返回no

<#assign x = "aa"/>

<#if x=="aa">

x is aa

<#else>

x not aa

</#if>

<span style="color:#FF0000;">遍历 list  map</span>

<#list somelist as item>

${item}

//如果是bean

${item.title}

</#list>
判断list的长度
<#if  somlist?size>0>

</#if>
遍历map

<#list mapObj?keys as k>
<#assign item = mapObj[k]>
//or <#assign item = mapObj.get(k)>
${item.title}
</#list>

防止null 值 黄色警告页面

${(item.title)!"一些默认值"}

freemarker 是可以调用java 里面的方法的

如

myList 是一个list

${myList.size()}

将输出list 的长度
freemarker  大于  小于 大于等于  小于等于

<#if x gt 1> "gt" 大于

</#if> 

<span style="color:#FF0000;">freemarker 常用内置函数的使用方法
</span>
在我们应用Freemarker过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker有没有类似于Java一样有相关的类及方法。在本文当中,我将向大家详细的介绍Freemarke的内置函数及用法,以便能帮助大家更熟练的应用Freemarker完成项目开发。

<span style="color:#FF0000;">一、 Sequence的内置函数</span>

1.	 sequence?first 返回sequence的第一个值。

2.	 sequence?last 返回sequence的最后一个值。

3.	 sequence?reverse 将sequence的现有顺序反转,即倒序排序

4.	 sequence?size	返回sequence的大小

5.	 sequence?sort	将sequence中的对象转化为字符串后顺序排序

6.	 sequence?sort_by(value) 按sequence中对象的属性value进行排序

注意:Sequence不能为null。以上方法在我的另一篇博客Freemarker中如何遍历List有详细的应用,感兴趣的朋友可以参考。

<span style="color:#FF0000;">二、Hash的内置函数</span>

1.	hash?keys 返回hash里的所有key,返回结果为sequence

2.	hash?values 返回hash里的所有value,返回结果为sequence

例如:

<#assign user={“name”:“hailang”, “sex”:“man”}>

      <#assign keys=user?keys>

      <#list keys as key>

        ${key}=${user[key]}

      </#list>
<span style="color:#FF0000;">
三、  操作字符串函数</span>

1.   substring(start,end)从一个字符串中截取子串

start:截取子串开始的索引,start必须大于等于0,小于等于end

end: 截取子串的长度,end必须大于等于0,小于等于字符串长度,如果省略该参数,默认为字符串长度。

例子:

${‘str’?substring(0)}à结果为str

${‘str’?substring(1)}à结果为tr

${‘str’?substring(2)}à结果为r

${‘str’?substring(3)}à结果为

${‘str’?substring(0,0)}à结果为

${‘str’?substring(0,1)}à结果为s

${‘str’?substring(0,2)}à结果为st

${‘str’?substring(0,3)}à结果为str

2.   cap_first 将字符串中的第一个单词的首字母变为大写。

${‘str’?cap_first}à结果为Str

3.  uncap_first将字符串中的第一个单词的首字母变为小写。

${‘Str’?cap_first}à结果为str

4.  capitalize将字符串中的所有单词的首字母变为大写

${‘str’? capitalize}à结果为STR

5.   date,time,datetime将字符串转换为日期

例如:

<#assign date1=”2009-10-12”?date(“yyyy-MM-dd”)>

<#assign date2=”9:28:20”?time(“HH:mm:ss”)>

<#assign date3=” 2009-10-12 9:28:20”?time(“HH:mm:ss”)>

${date1}à结果为2009-10-12

${date2}à结果为9:28:20

${date3}à结果为2009-10-12 9:28:20

注意:如果指定的字符串格式不正确将引发错误。

6.   ends_with 判断某个字符串是否由某个子串结尾,返回布尔值。

${“string”?ends_with(“ing”)?string} 返回结果为true

注意:布尔值必须转换为字符串才能输出

7.	html 用于将字符串中的<、>、&和“替换为对应得<>":&

8.	index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。

 Start参数用于指定从字符串的那个索引处开始搜索,start为数字值。

 如果start大于字符串长度,则start取值等于字符串长度,如果start小于0, 则start取值为0。

 ${“string”?index_of(“in”) à结果为3

${“string”?index_of(“ab”) à结果为-1

9.	 length返回字符串的长度 ${“string”?length}à结果为6

10.	lower_case将字符串转为小写

${“STRING”?lower_case}à结果为string

11.	upper_case将字符串转为大写

${“string”?upper_case}à结果为STRING

12.	 contains 判断字符中是否包含某个子串。返回布尔值

 ${“string”?contains(“ing”)?string} à结果为true

  注意:布尔值必须转换为字符串才能输出

13.	 number将字符串转换为数字

${“111.11”?number}à结果为111.11

14.	 replace用于将字符串中的一部分从左到右替换为另外的字符串。

${“strabg”?replace(“ab”,”in”)} à结果为string

15.	split使用指定的分隔符将一个字符串拆分为一组字符串

<#list “This|is|split”?split(“|”) as s>

  ${s}

</#list>

结果为:

This

is

split

16.	   trim 删除字符串首尾空格 ${“ String ”?trim} à结果为String

<span style="color:#FF0000;">四、操作数字</span>

1.	  c 用于将数字转换为字符串

${123?c} à结果为123

2.		string用于将数字转换为字符串

Freemarker中预订义了三种数字格式:number,currency(货币)和percent(百分比)其中number为默认的数字格式转换

例如: 

<#assign tempNum=20>

${tempNum}   

${tempNum?string.number}或${tempNum?string(“number”)} à结果为20

${tempNum?string.currency}或${tempNum?string(“currency”)} à结果为¥20.00

${tempNum?string. percent}或${tempNum?string(“percent”)} à结果为2,000%

<span style="color:#FF0000;">五、	操作布尔值</span>

string 用于将布尔值转换为字符串输出

true转为“true”,false转换为“false”

foo?string(“yes”,”no”)如果布尔值是true,那么返回“yes”,否则返回no

<span style="color:#FF0000;">freemarker List的遍历</span>
Freemarker中如何遍历List摘要:在Freemarker应用中经常会遍历List获取需要的数据,
并对需要的数据进行排序加工后呈现给用户。那么在Freemarker中如何遍历List,
并对List中数据进行适当的排序呢?
通过下文的介绍,相信您一定会找到答案。
<span style="color:#FF0000;">一、 Freemarker中list指令简单介绍</span>
要想在Freemarker中遍历list,必须通过使用list指令,即<#list sequence as item>…</#list>
sequence是集合(collection)的表达式,item是循环变量的名字,不能是表达式。
当在遍历sequence时,会将遍历变量的值保存到item中。
举个例子说明吧:
<#list userList as user>
…
</#list>
userList中封装了很多个User对象,我们在遍历userList时候,会将遍历的User对象的值,保存到上述的user变量中。
那么在取值时,我们可以通过${user.userName }来获取User对象的userName属性值。
List指令还隐含了两个循环变量:
item_index:当前迭代项在所有迭代项中的位置,是数字值。
item_has_next:用于判断当前迭代项是否是所有迭代项中的最后一项。
注意:在使用上述两个循环变量时,一定要将item换成你自己定义的循环变量名,item其实就是前缀罢了。
例如,如果你使用<# list list as l>..</#list>定义,那么就要使用l_index,l_has_next。

在循环过程中,如果您想跳出循环,那么可以使用结合break指令,即<#break>来完成。
<span style="color:#FF0000;">二、 Freemarker中对List进行排序</span>
通常我们的排序操作都是通过DAO层来实现的,如果我们想随时更改我们的排序,那么就必须修改我们的DAO层代码,
确实不方便。但Freemarker为我们提供了这样的排序方法,解决了这个问题。
1. sort升序排序函数
sort对序列(sequence)进行排序,要求序列中的变量必须是:字符串(按首字母排序),数字,日期值。
<#list list?sort as l>…</#list>
2. sort_by函数
sort_by有一个参数,该参数用于指定想要排序的子变量,排序是按照变量对应的值进行排序,如:
<#list userList?sort_by(“age”) as user>…</#list>
age是User对象的属性,排序是按age的值进行的。
3. reverse降序排序函数
<#list list? reverse as l>…</#list>
reverse使用同sort相同。reverse还可以同sort_by一起使用
如:想让用户按年龄降序排序,那么可以这个样写<#list userList?sort_by(“age”)?reverse as user>…</#list>

"_index"是FreeMarker中对于循环索引变量的命名约定。
     通过“迭代变量名_index”即可访问当前循环索引。
     类似的循环状态访问约定还有“迭代变量名_has_next”,可通过这个循环状态属性判断是否还有后继循环。		因很多时候要用到“序号”、“索引”之类的东西,而FreeMarker刚好自己带有,但很多人还并不知道它的妙用。因此就从Spring开发指南摘录下来。		这样可以避免另申请一个变量,然后每次循环体又对它+1了。		不知道是否提到过这个。 <#list subDir as d>
  <input type="checkbox" name="ids" value="file-${d_index}"/>
</#list>

<span style="color:#FF0000;">FreeMarker 基础知识 表达式(引用)</span>
表达式是FreeMarker的核心功能,FreeMarker中的插值支持多种表达式。
<span style="color:#FF6666;">一、直接指定值</span>
直接指定值可以是字符串、数值、布尔值、集合及Map对象。
1. 字符串
直接指定字符串值使用单引号或双引号限定。字符串中可以使用转义字符”\"。如果字符串内有大量的特殊字符,则可以在引号的前面加上一个字母r,则字符串内的所有字符都将直接输出。2. 数值
数值可以直接输入,不需要引号。FreeMarker不支持科学计数法。3. 布尔值
直接使用true或false,不使用引号。4. 集合
集合用中括号包括,集合元素之间用逗号分隔。
使用数字范围也可以表示一个数字集合,如1..5等同于集合[1, 2, 3, 4, 5];同样也可以用5..1来表示[5, 4, 3, 2, 1]。5. Map对象
Map对象使用花括号包括,Map中的key-value对之间用冒号分隔,多组key-value对之间用逗号分隔。
注意:Map对象的key和value都是表达式,但key必须是字符串。
<span style="color:#FF6666;">二、输出变量值</span>
FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性。1. 顶层变量
所谓顶层变量就是直接放在数据模型中的值。输出时直接用${variableName}即可。2. 输出集合元素
可以根据集合元素的索引来输出集合元素,索引用中括号包括。如: 输出[“1”, “2”, “3”]这个名为number的集合,可以用${number[0]}来输出第一个数字。FreeMarker还支持用number[1..2]来表示原集合的子集合[“2”, “3”]。3. 输出Map元素
对于JavaBean实例,FreeMarker一样把它看作属性为key,属性值为value的Map对象。
输出Map对象时,可以使用点语法或中括号语法,如下面的几种写法的效果是一样的:
       book.author.name
       book.author["name"]
       book["author"].name
       book["author"]["name"]
使用点语法时,变量名字有和顶层变量一样的限制,但中括号语法没有任何限制。
<span style="color:#FF6666;">三、字符串操作</span>
1. 字符串连接
字符串连接有两种语法:
(1) 使用${..}或#{..}在字符串常量内插入表达式的值;
(2)  直接使用连接运算符“+”连接字符串。
如,下面两种写法等效:
        ${"Hello, ${user}"}
        ${"Hello, " + user + "!"}
有一点需要注意: ${..}只能用于文本部分作为插值输出,而不能用于比较等其他用途,如:
        <#if ${isBig}>Wow!</#if>
        <#if "${isBig}">Wow!</#if>
应该写成:
        <#if isBig>Wow!</#if>																													 2. 截取子串
截取子串可以根据字符串的索引来进行,如果指定一个索引值,则取得字符串该索引处的字符;如果指定两个索引值,则截取两个索引中间的字符串子串。如:
        <#assign number="01234">
        ${number[0]} <#-- 输出字符0 -->
        ${number[0..3]} <#-- 输出子串“0123” -->
<span style="color:#FF6666;">四、集合连接操作</span>
    连接集合的运算符为“+”
<span style="color:#FF6666;">五、Map连接操作</span>
Map连接操作的运算符为“+”
<span style="color:#FF6666;">六、算术运算符</span>
FreeMarker表达式中支持“+”、“-”、“*”、“/”、“%”运算符。
<span style="color:#FF6666;">七、比较运算符</span>
表达式中支持的比较运算符有如下几种:
1. =(或者==): 判断两个值是否相等;
2. !=: 判断两个值是否不相等;
注: =和!=可以用作字符串、数值和日期的比较,但两边的数据类型必须相同。而且FreeMarker的比较是精确比较,不会忽略大小写及空格。
3. >(或者gt): 大于
4. >=(或者gte): 大于等于
5. <(或者lt): 小于
6. <=(或者lte): 小于等于
注: 上面这些比较运算符可以用于数字和日期,但不能用于字符串。大部分时候,使用gt比>有更好的效果,因为FreeMarker会把>解释成标签的结束字符。可以使用括号来避免这种情况,如:<#if (x>y)>。八、逻辑运算符
1. &&: 逻辑与;
2. ||: 逻辑或;
3. !: 逻辑非
逻辑运算符只能用于布尔值。九、内建函数
FreeMarker提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可以通过内建函数来转换输出变量。字符串相关常用的内建函数:
1. html: 对字符串进行HTML编码;
2. cap_first: 使字符串第一个字母大写;
3. lower_case: 将字符串转成小写;
4. upper_case: 将字符串转成大写;集合相关常用的内建函数:
1. size: 获得集合中元素的个数;数字值相关常用的内建函数:
1. int: 取得数字的整数部分。十、空值处理运算符
FreeMarker的变量必须赋值,否则就会抛出异常。而对于FreeMarker来说,null值和不存在的变量是完全一样的,因为FreeMarker无法理解null值。
FreeMarker提供两个运算符来避免空值:
<span style="color:#FF0000;">1. !: 指定缺失变量的默认值;
2. ??:判断变量是否存在。</span>
!运算符有两种用法:variable!或variable!defaultValue。第一种用法不给变量指定默认值,表明默认值是空字符串、长度为0的集合、或长度为0的Map对象。
使用!运算符指定默认值并不要求默认值的类型和变量类型相同。
??运算符返回布尔值,如:variable??,如果变量存在,返回true,否则返回false。

freemarker 的内建函数 contains 的使用
freemarker 的内建函数 contains 的使用 关键字: freemarker contains
freemarker 的内建函数 contains 的使用:
<#if employee.departments?contains(department)>checked="checked"</#if> 其中departments是一个集合,而department是departments集合里的一个元素。contains函数可以判断出,元素 department是否存在于集合departments里,最终返回一个Booleancontains是freemarker的内建函数,即自带的 。
FreeMarker 的内建函数有:
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
时间: 2024-10-29 10:46:38

FreeMarker惯用内置函数的相关文章

FreeMarker惯用内置函数--赶快收藏以备用

<pre class="java" name="code"><span style="color:#FF0000;">一.Sequence的内置函数</span> 1.sequence?first 返回sequence的第一个值. 2.sequence?last 返回sequence的最后一个值. 3.sequence?reverse 将sequence的现有顺序反转,即倒序排序 4.sequence?size

Freemarker的内置函数用法笔记

Freemrker内置了很多函数,如操作字符串,数字,集合等,可以方便的在页面处理数据. 一. Sequence的内置函数 1. sequence?first 返回sequence的第一个值. 2. sequence?last 返回sequence的最后一个值. 3. sequence?reverse 将sequence的现有顺序反转,即倒序排序 4. sequence?size 返回sequence的大小 5. sequence?sort 将sequence中的对象转化为字符串后顺序排序 6.

Freemarker 内置函数、遍历list

一.  Sequence的内置函数1.sequence?first 返回sequence的第一个值.2.sequence?last  返回sequence的最后一个值.3.sequence?reverse 将sequence的现有顺序反转,即倒序排序4.sequence?size    返回sequence的大小5.sequence?sort    将sequence中的对象转化为字符串后顺序排序6.sequence?sort_by(value) 按sequence中对象的属性value进行排序

freemarker内置函数,数字,字符串,日期格式化

一.  Sequence的内置函数 1.  sequence?first 返回sequence的第一个值. 2.  sequence?last  返回sequence的最后一个值. 3.  sequence?reverse 将sequence的现有顺序反转,即倒序排序 4.  sequence?size    返回sequence的大小 5.  sequence?sort    将sequence中的对象转化为字符串后顺序排序 6.  sequence?sort_by(value) 按seque

python3.7 内置函数整理

#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 内置函数整理 #abs(x) #返回数字的绝对值. 参数可以是整数或浮点数. 如果参数是复数,则返回其大小 # print(abs(1)) # print(abs(-1)) # print(abs(-1.234)) # 1 # 1 # 1.234 #all(iterable) #如果一个iterable(可迭代对象)的所有元素都为true(或者iterable为空),则返

内置函数

内置函数思维导图: 惊喜不断哟~~~~~~~

lambda表达式+python内置函数

传统的定义函数方式如下 def f1(): return 123 lambda表达式定义函数 f2 = lambda : 123 python3的内置函数 1.abs 绝对值 i = abs(-11) print (i) 输出结果是11 abs = absolute 2,all 循环参数,如果每个元素都为真,则返回为真 r = all([True, True]) print (r) 在python中 0 () [] ''和 None是False(空值都是假的) r = all(["123&quo

Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结

Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格式如下:function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr :需要进行正则处理的字符串__pattern :进行匹配的正则表达式,匹配的值将返回,返回策略由__occurrence决定__po

Python中内置函数的介绍

内置函数的功能介绍 常用内置函数如下: 1.abs() 绝对值 格式:abs(x) 例如:print(abs(-18)) >>> 18 返回值:number #该函数主要用于数值类的操作 2.all() 是否都为真 格式:all(iterable) 例如:print(all([1,2,3,])) >>> Ture 返回值:bool #该函数主要用于可迭代对象的操作,主要为列表.元祖.字典和集合.当这些类型的元素中有空字符串.空列表.空元祖.空字典.空集合时,则返回值为F