[freemarker] freemarker 初涉(1)
user实体对象:
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id ;
private String name ;
private Double age ;
private Date birth ;
private boolean isLive;
private String email;
}
controller:
package com.wa.xwolf.freemarker.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.wa.xwolf.freemarker.util.UserList; @Controller public class TestFtl { @RequestMapping("/test") public ModelAndView toTest(Model model){ ModelAndView view = new ModelAndView(); view.setViewName("test/test"); view.addObject("name", "freemarker系统学习测试"); view.addObject("age",120); view.addObject("isLive",Boolean.TRUE); view.addObject("users",UserList.getUsers()); return view; } }
封装的list对象:
package com.wa.xwolf.freemarker.util; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.wa.xwolf.freemarker.model.User; public class UserList { public static List<User> getUsers(){ List<User> list = new ArrayList<User>(); User user1 = new User(1, "纳兰性德", 25.0, new Date(32), true,"rf32@sina.com"); User user2 = new User(2, "铁木真", 24.32, new Date(213432), true,"fsd33@sina.com"); User user3 = new User(3, "卓文君", 221.21, new Date(4332432), true,"fsd34@sina.com"); list.add(user1); list.add(user2); list.add(user3); return list; } }
test.ftl:
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>freemarker测试</title> </head> <body> <table> <tr> <td>名称:</td> <#--if elseif else--> <td><#if name=="freemarker系统学习测试">freemarker整合 <#elseif name=="freemarker">freemarker <#else>${name} </#if> </td> </tr> <#--freemarker 对不存在值的处理--> <tr> <td>freemarker对不存在值得处理</td> <td><#if what??>${what}</#if></td> </tr> <#--对集合的遍历--> <#list users as user> <tr> <#-- 使用>=和>的时候有一点小问题。 FreeMarker 解释>的时候可以把它当作 FTL 标签的结 束符。为了避免这种问题,不得不将表达式放到括号内: <#if (x > y)>,或者可以在 比较关系处使用> 和< : <#if x > y>。(通常在 FLT 标签中不支持实体引 用(比如&... ; 这些), 否则就会抛出算数比较异常)。 另外,可以使用 lt 代替<, lte 代替<=, gt 代替>, gte 代替>=, 由于历史遗留的原因, FTL 也支持\lt, \lte, \gt 和 \gte, 使用他们和使用不带反斜杠的效果一样--> <td > <#if 2<user.id >${user.id}</#if></td> <td>${user.name}</td> <td>${user.age}</td> <td>${user.email?upper_case}<#--使用内建函数将字符串大写--></td> </tr> </#list> <#-- 输入不带引号的数字就可以直接指定一个数字,必须使用点作为小数的分隔符而不能是 其他的分组分隔符。 可以使用-或+来表明符号(+ 是多余的)。 科学记数法暂不支持使用 (1E3 就是错误的),而且也不能在小数点之前不写 0(.5 也是错误的)。 下面的数字都是合法的: 0.08, -5.013 , 8 , 008 , 11 , +11。 数值文字 08 , +8 , 8.00 和 8 是完全相等的,它们都是数字 8。因此${08} , ${+8} , ${8.00} 和${8} 打印的都是相同的。 --> <#list [1+3,10/2,5%3,"spring",20,+20,020,20.00,0.65] as t> <tr > <td>${t}</td> </tr> </#list> </table> <#--freemarker内建函数--> <span>${(10/3)?int}<#--int 表示取整数部分--></span> <span>${12.56?int}<#--int 表示取整数部分--></span> <span>${"love"+"horse"?cap_first}<#--首字母大写--></span> <span>${" MouSe "?trim?lower_case}<#--使用多个内建函数,去掉字符串前后的空格,小写--></span> <#-- 自定义指令可以使用 macro 指令来定义,宏是有一个变量名的模板片段。你可以在模板中使用宏作为自定义指令,这样就能进行 重复性的工作. --> <#macro greet> <h1> HELLO,FREEMARKER</h1> </#macro> <#-- macro 指令自身不打印任何内容,它只是用来创建宏变量,所以就会有一个名为 greet 的变量。在<#macro greet>和</#macro>之间的内容(称为宏定义体) 当 使用它作为指令时将会被执行。 你可以在 FTL 标记中通过@代替#来使用自定义指令。 使用 变量名作为指令名。而且,自定义指令的结束标记也是需要的。那么,就可以这样来使用 greet 宏了: --> <@greet> </@greet> <#-- 宏能做的事情还有很多,因为在<#macro ... >和</#macro>之间的东西是模板 片段,也就是说它可以包含插值(${ ... } )和 FTL 标签(如<#if ... >... </#if>)。 注意: 程序员通常将使用<@... >,这称为宏调用。 --> <@greet/> <#-- 我们来改进 greet 宏使之可以使用任意的名字,而不仅仅是”Joe”。为了实现这个目 的,就要使用到参数。 在 macro 指令中,宏名称的后面位置是用来定义变量的。 这里我们 仅在 greet 宏中定义一个变量 --> <#macro greet name> <h1> HELLO,${name}</h1> </#macro> <@greet "宏定义"/> <div> <#include "foot.ftl"> </div> </body> </html>

浙公网安备 33010602011771号