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.判断是否为空
经常会用到,如果对象 != null则xxxx,在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 替代
此文章为多数人总结,请尊重原创
- FreeMarker标签使用汇总
- freemarker 标签使用
- FreeMarker标签与使用
- FreeMarker标签使用
- freemarker标签使用
- freemarker使用struts2标签
- FreeMarker标签使用
- FreeMarker标签与使用
- FreeMarker标签使用
- FreeMarker标签与使用
- FreeMarker标签与使用
- FreeMarker标签与使用
- Freemarker标签使用
- FreeMarker标签与使用
- FreeMarker标签使用整理
- freemarker标签使用注意
- freemarker 在FreeMarker中使用JSP标签
- 【网络搜集】FreeMarker标签使用
- 03-使用Nginx配置虚拟主机(MAC)
- Spring batch
- 线程与进程
- Android 传递数据
- Unit9-使用结构化命令
- FreeMarker标签使用汇总
- WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案
- Android--ListView
- 微信服务号开发 合完程序后自动回复不能用?
- 仿小米天气24小时滚动显示控件
- Android零基础入门第52节:自定义酷炫进度条
- idea创建maven项目,本教程适合各类小白(一)
- Linux Kernel 4.13 RC6发布:正式版9月3日发布
- 剑指offer(十五)反转链表