接着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>
相关推荐
它与Java语言紧密结合,但模板设计者无需了解Java代码,只需要编写简单的模板语言(FTL:FreeMarker Template Language)来描述数据如何呈现。本篇文章将深入探讨FreeMarker的核心概念、用法以及常见应用场景。 1. ...
### Freemarker详解 #### 概述 FreeMarker是一款强大的模板引擎,主要应用于Web开发领域,其核心功能在于能够实现Web页面的设计与业务逻辑的分离,从而使得开发过程更加清晰高效。通过将HTML、XML或其他格式的文档...
Freemarker 简介及标签详解大全 FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写。FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。虽然 FreeMarker ...
SpringBoot整合FreeMarker详解 SpringBoot是一个基于Java的开源框架,旨在简化企业级应用程序的开发,而FreeMarker是一个基于模板引擎,用于生成静态HTML页面。今天,我们将探讨如何将FreeMarker与SpringBoot整合...
### Freemarker工作流程详解 #### 1. 创建Configuration对象 Freemarker的核心是`Configuration`类,它是用于配置和控制Freemarker的主要接口。在代码示例中,首先实例化了`Configuration`对象,这是使用...
FreeMarker模板文件的组成及基本语法详解 FreeMarker模板文件由四部分组成:文本、注释、插值和FTL指令。文本是直接输出的部分,注释是以#--开头的格式部分,不会输出。插值是以${...}或#{...}格式的部分,将使用...
### Freemarker标签详解 #### 一、`assign` 指令 `assign` 指令用于在模板页面创建或替换一个顶层变量。它的主要功能包括: - 创建或替换单个变量 - 创建或替换多个变量 **示范代码:** ```ftl ["星期一",...
FreeMarker详解,内包括freemarker教程_中文版、freemarker中文参考手册、FreeMarker标签使用、freemarker学习文档、freemarker根据模版生成文件使用例子 等文档
二、Freemarker语法基础 1. 变量表示: `${variable}` 用于输出变量的值,`variable`是Java对象的属性或方法名。 2. 注释:`<#-- comment -->` 用于在模板中添加注释,不会出现在生成的输出中。 3. 输出处理:`...
Freemarker是一个强大的模板引擎,常用于Web应用中的视图层渲染,它的主要优点是与业务逻辑分离,提高代码的可维护性和可读性。Spring框架则是Java领域中广泛使用的轻量级应用框架,它提供了丰富的功能,包括依赖...
提供的"FreeMarker相关学习文档"可能包括模板语法详解、最佳实践、示例代码等内容,可以帮助初学者快速上手。通过阅读这些资料,你可以深入了解FreeMarker的各个方面,从而更好地利用这个强大的模板引擎。 总结,...
**SpringBoot集成Freemarker与Shiro框架详解** 在现代Web开发中,SpringBoot因其简洁、高效的特性,已经成为很多开发者的选择。而FreeMarker和Shiro则分别是常用的模板引擎和安全框架,它们能帮助我们构建出功能...
**Eclipse Freemarker 插件详解** Eclipse是一款广受欢迎的开源集成开发环境(IDE),它支持多种编程语言,如Java、Python等。而Freemarker则是一种强大的模板引擎,常用于Web应用中的动态页面生成,它允许开发者将...
### 重要知识点详解 #### 1. Freemarker与分页功能结合 在Freemarker中实现分页功能,通常涉及到以下几个关键点: - **数据模型处理**:首先,需要在后端(如Java)中对数据进行分页处理,这通常涉及到SQL查询...
### FreeMarker实例教程知识点详解 #### 一、FreeMarker简介 **FreeMarker**是一款功能强大的模板引擎,主要用于生成文本输出,如HTML页面、电子邮件、配置文件等。它被广泛应用于Web开发领域,能够帮助开发者轻松...
### FreeMarker概述与核心知识点详解 #### 一、FreeMarker简介 FreeMarker是一个非常流行的开源模板引擎,主要用于根据模板和数据生成文本输出。它是由Java编写而成,因此可以在任何支持Java运行环境的地方运行。...
**FreeMarkerIDE插件在Eclipse中的应用与详解** FreeMarker是一个开源模板引擎,它用于生成动态HTML、XML或其他格式的文本输出。在Java开发环境中,Eclipse作为一款广泛使用的集成开发环境(IDE),提供了丰富的...
### Freemarker语法完整版知识点详解 #### A. 概念 **1. Scalars(标量)** - **字符串**: 由单引号或双引号括起来的文本。 - **数字**: 直接使用数值。 - **日期**: 通常从数据模型中获取。 - **布尔值**: `...
FreeMarker 是一个强大的模板引擎,常用于Web应用的视图层,它允许开发者将静态页面设计与业务逻辑相分离。其工作原理是将HTML页面的布局和样式存放在FreeMarker模板文件中,而动态数据则由Java代码提供,这两部分在...