[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)>,或者可以在
比较关系处使用&gt;&lt;<#if x &gt; 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>

 

posted @ 2015-03-06 22:46  snow__wolf  阅读(210)  评论(0)    收藏  举报