FreeMarker标签使用汇总

来源:互联网 发布:万达旅游城 知乎 编辑:程序博客网 时间:2024/06/05 18:29

前言:

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,在我们项目中,用到了大量的FreeMarker标签,其中负责前台页面的展示,以及后台数据的查询。

1.FreeMarker中处理页面自动四舍五入问题

     在开发中很容易忽视一点,输入一个值(可能是小数),输出时如果不做处理,就很容易出现隐形的BUG。比如,如果从数据库取出一个0.22的数值,一般的输出${x?if_exists?html},这时是显示0,而不是0.22

    
应该写成${x?if_exists?string.number}或者${x?if_exists.toString()?html}

 

2、FreeMarker截取字符串

例如:<@substring   title="${goodsName}"  length="80" dot="..."/> 

说明:<@substring    /> 固定的语法

Title中为需要截取的字符串

Length为截取的长度

Dot为截取后,后面字符串的显示

或者有更简单的语法

如代码:<#assign content=root.keyWord>
       ${content?substring(0,100)}

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 

3算术运算符

    *取整运算

     <#assign x="5" >      ${(x/2)?>int}       //输出为2

     ${1.1?int}                //输出为1

     ${1.999?int}                     //输出为1

     ${-1.1?int}                    //-1

 

 

4、FreeMarker的常用指令

  一、if指令

     <#if condifition>

        ...

     <#elseif condifition>

        ...  

     <#else>

        ...

     </#if>

5.include指令    

用于指定包含指定页面.

<#includefilename options>

 * filename: 该参数指定被包含的模板文件.

 * options :  该参数可以被省略,指定包含时的选项,包含encoding和parase两个选项.  

6.判断是否为空

经常会用到,如果对象 != nullxxxx,在freemarker中表达比较奇怪,例如判断 target 是否为null,如果不为 nll则做xxx动作

<#iftarget??>

 xxxx

</#if>

或者:

<#if mouse?exists>       

 Mouse found 

<#else>

Mousenot found 

</#if>

 

 

7.FreeMarker遍历List

一、  Freemarker中list指令简单介绍

要想在Freemarker中遍历list,必须通过使用list指令,即

<#listsequence as item>

</#list>

sequence是集合(collection)的表达式,item是循环变量的名字,不能是表达式。

当在遍历sequence时,会将遍历变量的值保存到item中。

举个例子说明吧:

<#listuserList as user>

 

</#list>

  userList中封装了很多个User对象,我们在遍历userList时候,会将遍历的User对象的值,保存到上述的user变量中。那么在取值时,我们可以通过${user.userName }来获取User对象的userName属性值。

List指令还隐含了两个循环变量:

item_index:当前迭代项在所有迭代项中的位置,是数字值。

item_has_next:用于判断当前迭代项是否是所有迭代项中的最后一项。

注意:在使用上述两个循环变量时,一定要将item换成你自己定义的循环变量名,item其实就是前缀罢了。

例如,如果你使用<# list list asl>..</#list>定义,那么就要使用l_index,l_has_next。

二、  Freemarker中对List进行排序

通常我们的排序操作都是通过DAO层来实现的,如果我们想随时更改我们的排序,那么就必须修改我们的DAO层代码,确实不方便。但Freemarker为我们提供了这样的排序方法,解决了这个问题。

1.  sort升序排序函数

sort对序列(sequence)进行排序,要求序列中的变量必须是:字符串(按首字母排序),数字,日期值。例如:<#list list?sort asl>…</#list>

2.  sort_by函数

sort_by有一个参数,该参数用于指定想要排序的子变量,排序是按照变量对应的值进行排序,如:

<#listuserList?sort_by(“age”) as user>…</#list>

age是User对象的属性,排序是按age的值进行的。

3.  reverse降序排序函数

    <#list list? reverse asl>…</#list>。reverse使用同sort相同。reverse还可以同sort_by一起使用

如:想让用户按年龄降序排序,那么可以这个样写

<#listuserList?sort_by(“age”)?reverse as user>…</#list>

三、  Freemarker如何遍历List实例应用(经常用的到!!!!)

创通过上面的介绍,相信您已经对Freemarker如何遍历List有了了解,那么我们就废话少说,开始做一个应用吧

User类。注意里面的字段和list中的相对应!!!!public class User{    private String username;    private String userPassword;    private String age;  (省略set和get方法)}<#--Freemarker遍历list-->简单遍历list:<#list userList as user>  用户名:${user.userName}  密  码:${user.userPassword}  年  龄: ${user.age}</#list> 

<#--Freemarker遍历list并应用list隐含变量item_index-->

item_index使用:

<#listuserList as user>

   第${user_index+1}个用户

用户名:${user.userName}

   密  码:${user.userPassword}

    年  龄: ${user.age}

</#list>

<#--Freemarker遍历list并应用list隐含变量item_has_next-->

item_has_next,size使用:

<#list userList as user>

     用户名:${user.userName}

     密 码:${user.userPassword}

     年 龄: ${user.age}

     <#if !user_has_next>

            共有${userList?size}最后一个用户是:${user.userName}

     </#if>

</#list>

<#--Freemarker遍历list并按用户年龄升序排序-->

按用户年龄升序排序:

<#list userList?sort_by("age") as user>

  用户名:${user.userName}

密  码:${user.userPassword}

  年 龄: ${user.age}

</#list>

<#--Freemarker遍历list并按用户年龄降序排序-->

按用户年龄降序排序:

<#list userList?sort_by("age")?reverse asuser>

  用户名:${user.userName}

  密 码:${user.userPassword}

  年 龄: ${user.age}

</#list>

<#--Freemarker遍历list当用户年龄大于21岁时,停止输出-->

list中应用break:

<#listuserList?sort_by("age")?reverse as user>

      用户名:${user.userName}

密  码:${user.userPassword}

      年 龄: ${user.age}

      <#if (user.age>21) >

            <#break>

       </#if>

</#list>

<#--Freemarker遍历list,获取list下标中的某一列值-->

简单遍历list,获取下标(index)为0,即第一项的值:

<#listuserList as user>

  <#if user_index == 0>

      用户名:${user.userName}

      密 码:${user.userPassword}

      年 龄: ${user.age}

  </#if>

</#list>


 8.freemarker中迭代Map的写法

写法一

<#--首先获取一个map对象-->

<#assignmyMap=stack.findValue("myMap")/>

<#listmyMap?keys as key>

 key:${key}----value:${myMap[key]?default("")}

</#list>

 

补充说明:

    stack.findValue("myMap"),这是struts2里面的用法,可以查找页面中viewStack中的值,myMap是一个Map对象。

   myMap[key]?default(""),这里是判断值是否为null,如果为null,设置默认值为空,freemarker不支持null,如果值为null,会抛出异常报错。

写法二

 Map对象使用花括号包括,Map中的key-value对之间以英文冒号(:)隔开,多组key-value对之间以英文逗号(,) 隔开。例如:

<#assignscore = {"语文":78,"数学":83,"Java":89}>

<#listscore?key as x>

    课程:${x}--->分数:${score[x]}

</#list>

9.其他语法补充

substring的用法 

<#assign user="hello jeen"> 

${user[0]}${user[4]}  ${user[1..4]} 

输出 : ho ello  

 

对浮点取整数

${123.23?int}输出 123

 

给变量默认值

${var?default("helloworld")?html}如果var is null 那么将会被hello world 替代



此文章为多数人总结,请尊重原创





原创粉丝点击