freemarker详解(二)

阅读更多

接着freemarker(一)

1. 输出html

  02.ftl


  
    MyHtml.html
    
  
  
  
    

您好,${username}

  test02

@Test
	public void test02(){
		Map root = new HashMap();
		root.put("username", "张三");
		fu.print("02.ftl", root);
		fu.fprint("02.ftl", root, "G:\\studyDemo\\freemarker\\02.html");
	}

  输出


  
    MyHtml.html
    
  
  
  
    

您好,张三

 2. if指令

   03.ftl


  
    MyHtml.html
    
  
  
  
  	
${user.id}------>${user.name}------>${user.age}
<#--if指令--> <#-- 语法:<#if condition> --> <#if user.age lt 12> ${user.name}还是一个小孩 <#elseif user.age == 18> ${user.name}刚成年 <#else> ${user.name}已成年

  test3

@Test
	public void test03(){
		Map root = new HashMap();
		root.put("user", new User(1,"zhangsan",22));
		fu.print("03.ftl", root);
		fu.fprint("03.ftl", root, "G:\\studyDemo\\freemarker\\03.html");
	}

  输出


  
    MyHtml.html
    
  
  
  
  	
1------>zhangsan------>22
zhangsan已成年

 3. list指令

   04.ftl

  


  
    MyHtml.html
    
  
  
  
  	<#--list指令-->
  	<#--
  		语法:<#list sequence as loopVariable>repeatThis
  	-->
  	<#list users as user>
  		
${user.id}------>${user.name}------>${user.age}

  test4

@Test
	public void test04(){
		Map root = new HashMap();
		List users = new ArrayList();
		users.add(new User(1,"zhangsan",22));
		users.add(new User(2,"lisi",33));
		users.add(new User(2,"wangwu",44));
		root.put("users", users);
		fu.print("04.ftl", root);
		fu.fprint("04.ftl", root, "G:\\studyDemo\\freemarker\\04.html");
	}

  输出


  
    MyHtml.html
    
  
  
  
  	        
1------>zhangsan------>22
2------>lisi------>33
2------>wangwu------>44

 5. include指令

  05.ftl


  
    MyHtml.html
    
  
  
  
  	<#--include指令-->
  	
<#include "/inc/inc.ftl">

   test5

@Test
	public void test05(){
		Map root = new HashMap();
		root.put("username", "张三");
		fu.print("05.ftl", root);
		fu.fprint("05.ftl", root, "G:\\studyDemo\\freemarker\\05.html");
	}

  输出  


  
    MyHtml.html
    
  
  
  
  	  	

欢迎张三进入系统!

 6. freemarker处理null

   06.ftl


  
    MyHtml.html
    
  
  
  
  	<#--freemarker处理null值 -->
  	
  	<#--在值之后添加一个"!"可以为这个值进行判断,如果不存在则使用!号声明的值-->
  	${user.id}------>${user.name}------>${user.group!"没有值"}
  	
  	<#--使用括号括起来之后,会连续判断所有的对象,如果为空则使用!号声明的值-->
  	${(user.group.name)!}
  	
  	<#--没有的元素也可以用"!"来进行判断-->
  	${(a.b)!"没有a.b元素"}
  	
  	<#--"??"用来判断是否为空,如果为true表示不为空,否则表示为空-->
  	<#if (a.b)??>
  		不为空
  	<#else>
  		为空
  	
  

   test6

@Test
	public void test06(){
		Map root = new HashMap();
		root.put("user", new User(1,"zhangsan",22));
		fu.print("06.ftl", root);
		fu.fprint("06.ftl", root, "G:\\studyDemo\\freemarker\\06.html");
	}

   


  
    MyHtml.html
    
  
  
  
  	  	1------>zhangsan------>没有值
  	
  	
  	
  	没有a.b元素
  	
  		为空
  

 7. freemarker基本数据类型

   07.ftl


  
    MyHtml.html
    
  
  
  
  	<#--freemarker基本数据类型-->
  	
  	<#--定义变量-->
  	<#assign username="张三" />
  	${username}
  	<#--定义数字-->
  	<#assign num=10 />
  	${num}
  	<#assign str="10" />
  	${str+11}
  	<#--值会完成覆盖-->
  	<#assign str="12" />
  	${str+11}
  	
  	<#--不能直接输出数字或都字符串以外的类型,否则都会报错,需要转换为字符才能输出
  		使用xxx?string可以完成对字符串的转换
  	-->
  	<#assign b=true />
  	<#--${b}-->
  	${b?string}
  	<#--日期不能直接输出,需要转换成字符串-->
  	${now?string("yyyy-MM-dd HH:mm:ss")}
  	
  	<#--以下显示了使用字符链接和插值的方式连接字符串-->
  	${"hello"+username}
  	${"hello${username}"}
  	
  	<#--字符串转换成日期 data用来转换日期,datatime转换日期和时间,time转换时间-->
  	<#assign bir="2015-07-12"?date("yyyy-MM-dd")/>
  	${bir}
  	<#assign bir="2015-07-12 13:16:55"?datetime("yyyy-MM-dd HH:mm:ss")/>
  	${bir}
  

  test7

@Test
	public void test07(){
		Map root = new HashMap();
		root.put("now", new Date());
		fu.print("07.ftl", root);
		fu.fprint("07.ftl", root, "G:\\studyDemo\\freemarker\\07.html");
	}

  输出


  
    MyHtml.html
    
  
  
  
  	  	张三
  	10
  	1011
  	1211
  	
  	true
  	2016-05-08 22:41:09
  	
  	hello张三
  	hello张三
  	
  	2015-7-12
  	2015-7-12 13:16:55
  

 8. freemarker序列和哈希表

  08.ftl


  
    MyHtml.html
    
  
  
  
  	<#--freemarker序列和哈希表-->
  	
  	<#assign nums=[1,2,3,45,66]/>
  	<#list nums as num>
  		${num}
  	
  	<#--特别注意,以下定义不用使用[1..10]-->
  	<#assign nums=1..10/><#--定义一个连续的序列从1到10-->
  	<#list nums as num>
  		${num}
  	
  	
  	<#--定义一个map集合-->
  	<#assign maps={"1": "张三","2": "李四"}>
  	${maps["1"]}
  	<#--以下代码可以将map的key转换为相应的序列-->
  	<#assign keys=maps?keys>
  	<#list keys as key>
  		${key}------>${maps[key]}
  	
  	
  

   test8

@Test
	public void test08(){
		Map root = new HashMap();
		fu.print("08.ftl", root);
		fu.fprint("08.ftl", root, "G:\\studyDemo\\freemarker\\08.html");
	}

   输出  


  
    MyHtml.html
    
  
  
  
  	  		1
  		2
  		3
  		45
  		66
  		1
  		2
  		3
  		4
  		5
  		6
  		7
  		8
  		9
  		10
  	
  	张三
  		1------>张三
  		2------>李四
  	
  

 9. freemarker自定义指令

  09.ftl


  
    MyHtml.html
    
  
  
  
  	<#--freemarker自定义指令-->
  	
  	<#--
  		macro指令语法:
  		<#macro name param1 param2 ... paramN>
			...
			<#nested loopvar1, loopvar2, ..., loopvarN>
			...
			<#return>
			...
		
  	-->
  	
  	<#--定义一个hello无参方法-->
  	<#macro hello>
  		

hello

<#--调用hello方法--> <#--<@hello />--> <#--定义一个hello方法,有两个参数nums,world--> <#macro hello nums world> <#list 1..nums as num> ${"hello${world}${num?string}"} <#--调用<@hello />会报错,因为hello有两个参数,在定义参数的值是参数名不能省略--> <#--<@hello nums=10 world="world" />--> <#--定义一个hello方法,有两个参数nums,world,并给了初始值,此时调用指令就可以省略参数,如果省略则使用默认值--> <#macro hello nums=10 world="world" > <#list 1..nums as num> ${"hello${world}${num?string}"} <#--<@hello/>--> <#macro hello> <#--nested会输出指令中的内容--> <#nested /> <#nested /> <@hello>

hello

<#macro hello> <#--nested会输出指令中的内容--> <#nested 11 12/> <#nested 22 23/> <@hello;x,y>

hello--${x}--${y}

   test9

@Test
	public void test09(){
		Map root = new HashMap();
		fu.print("09.ftl", root);
		fu.fprint("09.ftl", root, "G:\\studyDemo\\freemarker\\09.html");
	}

  输出


  
    MyHtml.html
    
  
  
  
  	  		

hello

hello

hello--11--12

hello--22--23

 10. freemarker变量

   10.ftl


  
    MyHtml.html
    
  
  
  
  	<#--freemarker变量-->
  	
  	<#--
  		变量分为:
  		1. 数据模型中的变量;  --root中的变量
  		2. 模版中的变量;	--使用<#assign>定义的变量
  		3. 局部变量; --指令中的变量
  		4. 循环变量; --在循环中的变量
  	-->
  	<#--数据模型中的变量-->
  	${username}
  	
  	<#--模版中的变量-->
  	<#assign username="李四" />
  	<#--此时模版中的变量与数据模型中的变量名称一致,不是覆盖,而是隐藏-->
  	${username}
  	<#--使用.globals可以访问数据模型中的变量-->
  	${.globals.username}
  	
  	<#--局部变量-->
  	<#macro test>
  		
  		<#--使用local可以声明局部变量,所以在macro中非特殊使用局部变量-->
  		<#local username="王五" />
  		${username}
  	
  	${username}	<#--输出"李四"-->
  	
  	<#--循环变量-->
  	<#list 1..10 as username>
  		<#--循环中的变量,出了循环就消失了-->
  		${username}
  	
  	${username} <#--输出"李四"-->
  

   test10

@Test
	public void test10(){
		Map root = new HashMap();
		root.put("username", "张三");
		fu.print("10.ftl", root);
		fu.fprint("10.ftl", root, "G:\\studyDemo\\freemarker\\10.html");
	}

 11. import指令

    11.ftl




Insert title here


<#--
	使用incldue可能会出现覆盖的问题,可以使用import来完成导入,并且加入名称空间
	<#include "/inc/inc1.ftl"/>
	<#include "/inc/inc2.ftl"/>
-->
<#import "/inc/inc2.ftl" as inc2/>
<#import "/inc/inc1.ftl" as inc1/>
	${inc2.username}
	${inc1.username}
<#--将一个变量定义到名称空间中-->
<#assign age=12 in inc2/>
${inc2.age}
<#--访问名称空间中的自定义指令-->
<@inc1.test/>

   test11

@Test
	public void test11() {
		Map root = new HashMap();
		fu.print("11.ftl", root);
	}

   输出




Insert title here


	李四
	张三
12
	hello world

 

你可能感兴趣的:(freemarker的list,freemarker的if,微风)