Freemarker基本语法
访问请求-servlet/action获取数据-跳往目标模板页面ftl
Pojo
public class Student implements Serializable{ private Integer id; private String name; private Date birthDate; private String dsc; private Date birth; privateInteger sex; }
例如在一个Servlet中组织将要在模板中使用到的数据
System.out.println("开始处理..."); Student student = new Student(); student.setId(new Integer(110)); student.setName("Tom"); student.setBirthDate(new Date()); Student student2 = new Student(); student2.setId(new Integer(111)); student2.setName("ken"); student2.setBirthDate(new Date()); List stuList = new ArrayList(); stuList.add(student); stuList.add(student2); request.setAttribute("stuList", stuList); request.setAttribute("msg", " get list success & success! "); request.setAttribute("isExist", Boolean.TRUE); List indexList = new ArrayList(); indexList.add(new Integer(110)); indexList.add(new Integer(112)); request.setAttribute("indexList", indexList); List number = new ArrayList(); number.add(new Integer(1)); number.add(new Integer(2)); number.add(new Integer(3)); List number2 = new ArrayList(); number2.add(new Integer(4)); number2.add(new Integer(5)); number2.add(new Integer(6)); List num = new ArrayList(); num.add(number); num.add(number2); Date date = new Date(); request.setAttribute("date", date); request.setAttribute("num", num); System.out.println("结束处理..."); request.getRequestDispatcher("/student.ftl").forward(request, response);
跳往目标模板页面student.ftl
<html> <head> <title>ftl基本语法使用示例</title> </head> <body> <center> <h2>1.字符串处理</h2> <#assign msg=' this IS the Test of freemarker & output'> 后台放入字符串:${msg}<br> html编码:${msg?html}<br> 转第一个字母大写:${msg?cap_first}<br> <#-- 转第一个字母小写:${msg?lower_first}<br>--> 字符串大写:${msg?upper_case}<br> 字符串小写:${msg?lower_case}<br> 去左右空格:${msg?trim}<br> 空值判断:${msg?if_exists}<br> 默认值abc:${msg?default('abc')}<br> 输出纯文本:${r"c:/ad/dfa"}<br> 插入boolean值false:<#assign foo=false/>${foo?string('true','false')}<br> 取下标为2的字符:${msg[2]}<br> 取字串1-7:${msg[1..7]}<br> 字符串拼接: <#assign ab="abc"> ${"hello "+ab}/${"hello${ab}"} <br> <hr> <h2>2.数字处理</h2> 赋值 assign x=3.1415926<br> <#assign x=3.1415926 /> x:m3小数部分最小3位 #{x;m3}<br> x:M5小数部分最大5位 #{x;M5}<br> x:m1M5 #{x;m1M5}<br> 运算结果:3*5=${3*5}<br> 内建int 1.1?int=:${1.1?int}<br> <br> 赋值assign y=20<br> <#assign y=20> 输出数字原:${y?string.number}<br> 输出货币数字:${y?string.currency}<br> 输出百分比:${y?string.percent}<br> 比较大小 21(使用括号): y>21= <#if (y >21) > false <#else> true </#if> <br> 比较大小 21(使用字串):y>21= <#if y gt 21> false <#else> true </#if> <br> 转义字符:${r"< lt <= lte > gt >= gte"} <br> <hr> <h2>3.其他处理</h2> 日期: <br> 格式化输出:${date?string('yyyy-MM-dd')}<br> 格式输出yyyy-MM-dd HH:mm:ss zzzz:${date?string("yyyy-MM-dd HH:mm:ss zzzz")}<br> <hr> <h2>4.流程控制</h2> 赋值:assign a = '1'<br> A.if - else逻辑判断<br> <#assign a = '1'> <#if a='0'> 0 <#elseif a='1'> 1 <#else> 2 </#if> <br> B.Switch<br> <#switch a> <#case '0'> 0 <#break> <#case '1'> 1 <#break> <#default> 2 </#switch> <br> C.遍历list<br> 后台传递list:stuList<br> 判断是否为空: <#if stuList?size=0> 空的 <#else> 非空 </#if> <br> 下标: <#list stuList as stu> ${stu_index} </#list><br> 内容: <#list stuList as stu> ${stu.name} </#list><br> <hr> <h2>5.集合</h2> 定义list["winter","spring","summer","autumn"]<br> 输出:<#list ["winter","spring","summer","autumn"] as x> ${x} </#list> <br> list[1..5] <#list 1..5 as list> ${list} </#list> <br> 定义Map{"abc":23,"efg":35}<br> <#assign ages={"abc":23,"efg":35}> 输出abc的年龄:${ages.abc}<br> 输出efg的年龄:${ages.efg}<br> 定义map,分别输出K-V <#assign selectelement = {"1":"选择A","2":"选择B","3":"选择C", "4":"选择D"}> <#assign skeys=selectelement?keys> <#list skeys as key> <#assign var0="${selectelement[key]}"> ${key}-${selectelement[key]} ---- ${var0} </#list><br> 序列连接["a","b"]+["e","f"]: <#assign liab=["a","b"]+["e","f"]> <#list liab as l > ${l} </#list><br> 散列连接{"1":"a","2":"b"}+{"2":"c","3":"d"}【散列右值覆盖左值】: <#assign ma={"1":"a","2":"b"}+{"2":"c","3":"d"} > <#assign keys=ma?keys > <#list keys as k> ${ma[k]} </#list><br> 双重list循环<br> <#list num as list> <#list list as temp> ${temp} </#list> <br> </#list> <br> <hr> <h2>6.宏的使用</h2> A.使用宏 <#macro greet person color> <font size="+2" color="${color}">Hello ${person}!</font> </#macro> <@greet person="ken" color="blue"/> <br> B.宏调用和嵌套nested:<br> <#macro border msg> ${msg}<br> <#nested><br> repart:<br> <#nested><br> </#macro> <@border msg="The OUT MSG:"> Macro Test! </@border> <br> C.宏与宏之间的嵌套:<br> <#macro person name> Hello! ${name}<br> </#macro> <@border msg="The OUT MSG:"> <@person name="Ken"/> </@border><br> D.宏变量中使用循环变量<br> <#macro repeat count> <#list 1..count as x> <#nested x,x/2,x==count /> </#list> </#macro> <@repeat count=4;c,halfc,last> ${c}. ${halfc}<br> <#if last> last! </#if> </@repeat> </center> </body> </html> 可以在一个ftl中专门定义宏文件 <#macro page title> </#macro> 然后在另一个文件中使用import调用 <#import "/page/ftl/macro/common.ftl" as com> 使用 <@com.page title=""> </@com.page>