`
阅读更多

接着freemarker(一)

1. 输出html

  02.ftl

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
    <h1>您好,${username}</h1>
  </body>
</html>

  test02

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

  输出

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
    <h1>您好,张三</h1>
  </body>
</html>

 2. if指令

   03.ftl

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	<h5>
  		${user.id}------>${user.name}------>${user.age}
  	</h5>
  	<#--if指令-->
  	<#--
  		语法:<#if condition></#if>
  	-->
  	<#if user.age lt 12>
  		${user.name}还是一个小孩
  	<#elseif user.age == 18>
  		${user.name}刚成年
  	<#else>
  		${user.name}已成年
  	</#if>
  </body>
</html>

  test3

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

  输出

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	<h5>
  		1------>zhangsan------>22
  	</h5>
  		zhangsan已成年
  </body>
</html>

 3. list指令

   04.ftl

  

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	<#--list指令-->
  	<#--
  		语法:<#list sequence as loopVariable>repeatThis</#list>
  	-->
  	<#list users as user>
  		<div>${user.id}------>${user.name}------>${user.age}</div>
  	</#list>
  </body>
</html>

  test4

@Test
	public void test04(){
		Map<String,Object> root = new HashMap<String,Object>();
		List<User> users = new ArrayList<User>();
		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");
	}

  输出

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	        <div>1------>zhangsan------>22</div>
  		<div>2------>lisi------>33</div>
  		<div>2------>wangwu------>44</div>
  </body>
</html>

 5. include指令

  05.ftl

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	<#--include指令-->
  	<div class="header">
  		<#include "/inc/inc.ftl">
  	<div>
  	<div class="footer">
  		<#include "/inc/copyright_footer.html">
  	</div>
  </body>
</html>

   test5

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

  输出  

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	  	<div class="header">
<h1>欢迎张三进入系统!</h1>  	<div>
  	<div class="footer">
<hr>
<i> 
	Copyright (c) 2000 <a href="http://www.acmee.com">Acmee Inc</a>,
	<br> All Rights Reserved. 
</i>  	</div>
  </body>
</html>

 6. freemarker处理null

   06.ftl

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

   test6

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

   

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	  	1------>zhangsan------>没有值
  	
  	
  	
  	没有a.b元素
  	
  		为空
  </body>
</html>

 7. freemarker基本数据类型

   07.ftl

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	<#--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}
  </body>
</html>

  test7

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

  输出

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	  	张三
  	10
  	1011
  	1211
  	
  	true
  	2016-05-08 22:41:09
  	
  	hello张三
  	hello张三
  	
  	2015-7-12
  	2015-7-12 13:16:55
  </body>
</html>

 8. freemarker序列和哈希表

  08.ftl

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

   test8

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

   输出  

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	  		1
  		2
  		3
  		45
  		66
  		1
  		2
  		3
  		4
  		5
  		6
  		7
  		8
  		9
  		10
  	
  	张三
  		1------>张三
  		2------>李四
  	
  </body>
</html>

 9. freemarker自定义指令

  09.ftl

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	<#--freemarker自定义指令-->
  	
  	<#--
  		macro指令语法:
  		<#macro name param1 param2 ... paramN>
			...
			<#nested loopvar1, loopvar2, ..., loopvarN>
			...
			<#return>
			...
		</#macro>
  	-->
  	
  	<#--定义一个hello无参方法-->
  	<#macro hello>
  		<h3>hello</h3>
  	</#macro>
  	<#--调用hello方法-->
  	<#--<@hello />-->
  	
  	<#--定义一个hello方法,有两个参数nums,world-->
  	<#macro hello nums world>
  		<#list 1..nums as num>
  			${"hello${world}${num?string}"}
  		</#list>
  	</#macro>
  	<#--调用<@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}"}
  		</#list>
  	</#macro>
  	<#--<@hello/>-->
  	
  	<#macro hello>
  		<#--nested会输出指令中的内容-->
  		<#nested />
  		<#nested />
  	</#macro>
  	<@hello>
  		<h3>hello</h3>
  	</@hello>
  	
  	
  	<#macro hello>
  		<#--nested会输出指令中的内容-->
  		<#nested 11 12/>
  		<#nested 22 23/>
  	</#macro>
  	<@hello;x,y>
  		<h3>hello--${x}--${y}</h3>
  	</@hello>
  </body>
</html>

   test9

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

  输出

<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	  		<h3>hello</h3>
  		<h3>hello</h3>
  	
  	
  		<h3>hello--11--12</h3>
  		<h3>hello--22--23</h3>
  </body>
</html>

 10. freemarker变量

   10.ftl

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

   test10

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

 11. import指令

    11.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<#--
	使用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/>
</body>
</html>

   test11

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

   输出

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	李四
	张三
12
	hello world
</body>
</html>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics