`
阅读更多

接着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>

 

分享到:
评论

相关推荐

    freemarker详解

    它与Java语言紧密结合,但模板设计者无需了解Java代码,只需要编写简单的模板语言(FTL:FreeMarker Template Language)来描述数据如何呈现。本篇文章将深入探讨FreeMarker的核心概念、用法以及常见应用场景。 1. ...

    Freemarker详解

    ### Freemarker详解 #### 概述 FreeMarker是一款强大的模板引擎,主要应用于Web开发领域,其核心功能在于能够实现Web页面的设计与业务逻辑的分离,从而使得开发过程更加清晰高效。通过将HTML、XML或其他格式的文档...

    Freemarker简介及标签详解大全

    Freemarker 简介及标签详解大全 FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写。FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。虽然 FreeMarker ...

    springboot整合freemarker详解

    SpringBoot整合FreeMarker详解 SpringBoot是一个基于Java的开源框架,旨在简化企业级应用程序的开发,而FreeMarker是一个基于模板引擎,用于生成静态HTML页面。今天,我们将探讨如何将FreeMarker与SpringBoot整合...

    freemarker

    ### Freemarker工作流程详解 #### 1. 创建Configuration对象 Freemarker的核心是`Configuration`类,它是用于配置和控制Freemarker的主要接口。在代码示例中,首先实例化了`Configuration`对象,这是使用...

    FreeMarker模板文件的组成及基本语法详解(一)

    FreeMarker模板文件的组成及基本语法详解 FreeMarker模板文件由四部分组成:文本、注释、插值和FTL指令。文本是直接输出的部分,注释是以#--开头的格式部分,不会输出。插值是以${...}或#{...}格式的部分,将使用...

    freemarker标签详解

    ### Freemarker标签详解 #### 一、`assign` 指令 `assign` 指令用于在模板页面创建或替换一个顶层变量。它的主要功能包括: - 创建或替换单个变量 - 创建或替换多个变量 **示范代码:** ```ftl ["星期一",...

    FreeMarker

    FreeMarker详解,内包括freemarker教程_中文版、freemarker中文参考手册、FreeMarker标签使用、freemarker学习文档、freemarker根据模版生成文件使用例子 等文档

    freemarker入门文档及例子

    二、Freemarker语法基础 1. 变量表示: `${variable}` 用于输出变量的值,`variable`是Java对象的属性或方法名。 2. 注释:`&lt;#-- comment --&gt;` 用于在模板中添加注释,不会出现在生成的输出中。 3. 输出处理:`...

    Freemarker整合spring实例详解

    Freemarker是一个强大的模板引擎,常用于Web应用中的视图层渲染,它的主要优点是与业务逻辑分离,提高代码的可维护性和可读性。Spring框架则是Java领域中广泛使用的轻量级应用框架,它提供了丰富的功能,包括依赖...

    FreeMarker相关学习文档

    提供的"FreeMarker相关学习文档"可能包括模板语法详解、最佳实践、示例代码等内容,可以帮助初学者快速上手。通过阅读这些资料,你可以深入了解FreeMarker的各个方面,从而更好地利用这个强大的模板引擎。 总结,...

    springboot集成freemarker和shiro框架

    **SpringBoot集成Freemarker与Shiro框架详解** 在现代Web开发中,SpringBoot因其简洁、高效的特性,已经成为很多开发者的选择。而FreeMarker和Shiro则分别是常用的模板引擎和安全框架,它们能帮助我们构建出功能...

    eclipse的freemarker插件

    **Eclipse Freemarker 插件详解** Eclipse是一款广受欢迎的开源集成开发环境(IDE),它支持多种编程语言,如Java、Python等。而Freemarker则是一种强大的模板引擎,常用于Web应用中的动态页面生成,它允许开发者将...

    freemarker的分页功能

    ### 重要知识点详解 #### 1. Freemarker与分页功能结合 在Freemarker中实现分页功能,通常涉及到以下几个关键点: - **数据模型处理**:首先,需要在后端(如Java)中对数据进行分页处理,这通常涉及到SQL查询...

    FreeMarker实例教程,手把手教你FreeMarker的方方面面

    ### FreeMarker实例教程知识点详解 #### 一、FreeMarker简介 **FreeMarker**是一款功能强大的模板引擎,主要用于生成文本输出,如HTML页面、电子邮件、配置文件等。它被广泛应用于Web开发领域,能够帮助开发者轻松...

    freemarker概述

    ### FreeMarker概述与核心知识点详解 #### 一、FreeMarker简介 FreeMarker是一个非常流行的开源模板引擎,主要用于根据模板和数据生成文本输出。它是由Java编写而成,因此可以在任何支持Java运行环境的地方运行。...

    eclipse中FreeMarkerIDE插件

    **FreeMarkerIDE插件在Eclipse中的应用与详解** FreeMarker是一个开源模板引擎,它用于生成动态HTML、XML或其他格式的文本输出。在Java开发环境中,Eclipse作为一款广泛使用的集成开发环境(IDE),提供了丰富的...

    freemarker语法完整版

    ### Freemarker语法完整版知识点详解 #### A. 概念 **1. Scalars(标量)** - **字符串**: 由单引号或双引号括起来的文本。 - **数字**: 直接使用数值。 - **日期**: 通常从数据模型中获取。 - **布尔值**: `...

    Freemarker原理解析

    FreeMarker 是一个强大的模板引擎,常用于Web应用的视图层,它允许开发者将静态页面设计与业务逻辑相分离。其工作原理是将HTML页面的布局和样式存放在FreeMarker模板文件中,而动态数据则由Java代码提供,这两部分在...

Global site tag (gtag.js) - Google Analytics