freemarker详细解析

FreeMarker解析List<JSONObject>数据的疑惑 使用java从数据库查询出来如下List格式的数据,用于保存分类目录树: 理综 --- 物理 ------------ 高一物理 ------------ 高二物理 ------------ 高三物理 --- 化学 ------------ 高一化学 ------------ 高二化学 ------------ 高三化学 文综 --- 政治 --- 历史 [ { 阅读详情

FreeMarker学习

Freemarker 简介

这是一个相当老牌的开源的免费的模版引擎。通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I5N7K0y0-1600246452847)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200903153620077.png)]

Freemarker 可以将模版和数据渲染成 HTML 。

Freemarker 模版默认后缀为 .ftl(FreeMarker Template Language)。也可以指定为其它的后缀。FTL 是一种简单的、专用的语言,它不是像 Java 那样成熟的编程语言。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。


Springboot整合

首先创建一个 Spring Boot 工程,引入 Freemarker 依赖,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qiIVT8s0-1600246452851)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200903154017402.png)]


pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>freemarker</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>freemarker</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-freemarker</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>1.5.9.RELEASE</version>
			</plugin>
		</plugins>
	</build>

</project>

application.yml
spring:
  freemarker:
    template-loader-path: classpath:/templates/    ///模板文件位置
    cache: false  //是否开启缓存
    charset: utf-8 //模板文件编码
    check-template-location: true //是否检查模板位置
    content-type: text/html //Content-Type的值
    expose-request-attributes: false //是否将HttpServletRequest中的属性添加到Model中
    expose-session-attributes: false //是否将HttpSession中的属性添加到Model中
    suffix: .ftl //模板文件后缀
    allow-request-override: false //HttpServletRequest的属性是否可以覆盖controller中model的同名项

等同于代码

public void test() throws IOException, TemplateException { 
    // 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。 
    Configuration configuration = new Configuration(Configuration.getVersion()); 

    // 第二步:设置模板文件所在的路径。 
    configuration.setDirectoryForTemplateLoading(new File("\\WEB-INF\\ftl")); 
    
    // 第三步:设置模板文件使用的字符集。一般就是utf-8. 
    configuration.setDefaultEncoding("utf-8"); 
    
    // 第四步:加载一个模板,创建一个模板对象。 Template template = configuration.getTemplate("hello.ftl"); 
    
    // 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。 
    Map dataModel = new HashMap(); 
    // 向数据集中添加数据 
    dataModel.put("hello", "this is my first freemarker test."); 
    
    // 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。 
    Writer out = new FileWriter(new File("D:\\Java\\Eclipse\\workspace_Test\\FreeMarker\\out\\hello.html")); 
    
    // 第七步:调用模板对象的process方法输出文件。 
    template.process(dataModel, out); 

    // 第八步:关闭流。 
    out.close(); 
}

testController
package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller
public class TestController {

    @RequestMapping("/test")
    public String test(Map<String,Object> map){
        map.put("test","我成功了吗");
        return "test";
    }


}

输出页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RFgSvLp3-1600246452853)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200903155212687.png)]


模板的基本语法

访问map中的key
${key}
访问pojo中的属性
${key.property}

##############

<body>
学号:${stu.id}<br>
姓名:${stu.name}<br>
年龄:${stu.age}<br>
</body>

取集合中的数据
<#list 要循环的数据 as 循环后的数据>

</list>


###############
<#list studentlist as student>
  <tr>
  		<td>${student_index}</td> //${student_index}也可以获取循环中的下标
        <td>${student.id}</td>
        <td>${student.name}</td>
        <td>${student.age}</td>
  </tr>
</list>

判断
<#if student_index % 2 == 0>
<#else>
</#if>


##################
<body>
<table boder=1>
<#list studentlist as student>
  <#if student_index %2 ==0>    //判断
       <tr bgcolor="red">
 <#else>
       <tr bgcolor="green">
</list>
</table>
</body>

日期类型格式化

直接取值:${date}(date是属性名)如果传来的是一个Date型数据会报错

${date?date} //2020-9-3
${date?time} //17:00:55
${date?datetime} //2020-9-3 17:00:55

如果感觉freemaker提供的功能太弱,可以在java中格式化好之后再通过普通字符串的形式传入进来。


Null值的处理

如果直接取一个不存在的值(值为null)时会报异常

如果允许变量可以为空,并且不希望报出异常,可以在变量后面加上一个!。

${aaa!}

Include标签

如果希望在某个FTL文件中引入另外一个FTL文件,可以使用FTL关键字。格式如下:

<#include “模板名称”> //(相当于jstl中的包含)
功能太弱,可以在java中格式化好之后再通过普通字符串的形式传入进来。

---

#### Null值的处理

如果直接取一个不存在的值(值为null)时会报异常

如果允许变量可以为空,并且不希望报出异常,可以在变量后面加上一个`!`。

```ftl
${aaa!}

Include标签

如果希望在某个FTL文件中引入另外一个FTL文件,可以使用FTL关键字。格式如下:

<#include “模板名称”> //(相当于jstl中的包含)
Freemarker编写ES语句 JSON解析 Freemarker编写ES语句 JSON解析Freemarker编写ES语句 JSON解析模板引擎语句工具类Configuration的配置读取模板引擎 Freemarker编写ES语句 JSON解析 业务上需要使用ES json语句做检索。又想类似Mybatis Mapper SQL写法,比起ES的API,SQL语句的可读性较高。遂采用Freemarker模板引擎做JSON解析工具。在此做个记录 模板引擎 freemarker、velocity或者thymeleaf都能实现。这里只说明Freemarke 阅读详情

相关推荐

深入解析Freemarker源码.zip

本文还有配套的精品资源,点击获取 简介:Freemarker是Java平台上的开源模板引擎,用于动态生成Web页面,常与Java Web开发框架如Spring MVC结合使用。本文档包括了Freemarker的源代码,对内部工作原理及二次开发有深入介绍。源码分析涉及模板语言解析、数据模型结合、模板指令处理、模板缓存机制、国际化处理、错误处理、自定义功能扩展、框架集成和性能优...

weixin_42578963的博客 549

FreeMarker详细介绍

FreeMarker概述 FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电 子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。 FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,将视图从业务逻辑中 抽离处理,业务中不再包括视图的展示,而是将视图交给 FreeMarker 来输出。虽然 FreeMarker 具有一 些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMar

weixin_44454512的博客 7万+

PyCharm与MicroPython联手:打造高效ESP32开发环境

本文详细介绍了如何使用PyCharm与MicroPython打造高效的ESP32开发环境。通过配置PyCharm插件、刷写MicroPython固件以及实战示例,帮助开发者快速上手嵌入式Python开发,显著提升物联网项目的开发效率。

weixin_29169899的博客 380

【FreeMarker】一文快速入门FreeMarker

详细介绍FreeMarker的使用及语法

Hanson的博客 6986

在WinXP操作系统上安装Tornado2.2详细教程

使用VxWorks的人都想在自己的电脑中装VxWorks的编译器Tornado,然而Win10操作系统对于Tornado并不友好,根本装不成功。而对于Win7操作系统,之前在实验室一台Win7上装Tornado成功过,并且一直在上面进行vx开发,但是过一段时间在其他Win7上装Tornado时又不能成功,由此说明Tornado对于Win7操作系统对Tornado的兼容也不是很好,所以想要长久使用T...

weixin_43822311的博客 4481

那些年-SAP固定资产导入AS91 OASV

固定资产起初导入步骤: 第一部分:资产数据导入 1)两个日期配置 填写图片摘要(选填) Specify transfer date/last closed fiscal year 这里的日期填写系统切换日期,如果系统是2015-10-01上线,这里填写2015-09-3 填写图片摘要(选填) Specifylast period posted in prv system 这里指定系统切换的上一期间。这里写2015-09 填写图片摘要(选填) ​2)AS91新增 填写固定资产的分类,公司

阿土工作室 7948

FreeMarker简介及使用示例

FreeMarker简介及使用示例

王文萱的博客 4336

别再手动调参了!用MATLAB+改进PSO算法,5步搞定机械臂轨迹优化(附完整代码)

本文介绍如何利用MATLAB和改进PSO算法快速优化机械臂轨迹规划,仅需5步即可完成传统耗时的手动调参过程。通过混沌初始化、自适应权重等创新方法,改进PSO算法显著提升优化效率,实现全局最优解搜索,适用于工业自动化中的机械臂控制。文章包含完整MATLAB代码实现,帮助工程师轻松应用于实际生产场景。

weixin_29232121的博客 354

Freemarker基础教程(一)

FreeMarker是一款模板引擎即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。模板编写为FreeMarkerTemplateLanguage(FTL)。它是简单的,专用的语言,不是像PHP那样成熟的编程语言。那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。常用的java模板引擎还有哪些。.........

云恒要逆袭的博客 5524

SpringBoot3项目实战:5分钟搞定Knife4j接口文档配置(含中文版设置)

本文详细介绍了在SpringBoot3项目中快速整合Knife4j接口文档工具的实战教程。内容涵盖核心依赖选择、基础配置、中文界面设置、API信息深度定制以及生产环境安全策略,帮助开发者高效构建专业、可交互的API文档门户,提升团队协作效率。

weixin_29204121的博客 256

广义平均(Generalized Mean, GeM)

本位介绍了广义平均操作的定义和简要推导,帮助大家理解其含义。

qq_45802280的博客 4547

freemarker模板引擎详解以及使用方法

freemarker模板引擎详解以及使用方法

真正的大师永远怀着一颗学徒的心 6482

Matlab可调用MODTRAN5封装器之Mod5

MODTRAN 是一个计算地球大气中电磁辐射传输的软件代码。MODTRAN是通过使用具有严格格式的输入文本文件来控制的。这个文件被称为“tape5”,扩展名为.tp5或.ltn。手工创建或编辑这个文件是不方便的。Mod5提供了一组函数来简化MODTRAN用例的处理。这些方法包括将tape5文件格式读取到Mod5类“实例”或“对象”中,更改文件中描述的案例实例,将tape5格式写回文件,在案例上运行MODTRAN并将MODTRAN输出文件中的各种结果读取回Matlab。还有许多绘图方法可用。

qq_19512613的博客 3255

Freemarker原理解析

http://aixiangct.blog.163.com/blog/static/915224612011413104313441/   FreeMarker生成静态页原理       FreeMarker适合于作为Web应用的表现层。freemarker大致原理是:将页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMark

shuhuai007的专栏 3967

深入浅出之CSPBlock模块(YOLO)

YOLO CSPX模块是YOLO系列算法中的一个重要组成部分,它通过跨阶段部分连接的方式减少了计算量,同时保证了模型的准确率。在YOLOv4及后续版本中,CSPX模块被广泛应用于主干网络和Neck结构中,为模型提供了强大的特征提取和融合能力。

浩瀚之水的专栏 6753

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

freemarker 解析字符串模板

转载自 http://balaschen.iteye.com/blog/51591 package freemarker.loader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.util.HashMap; import java.util....

nonobabaya的博客 1325

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

freemarker视图解析配置

这里写目录标题maven依赖配置文件多视图解析配置 maven依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency> <!--如果id="freemarkerConfigurer"这个bean中属性无法解析

csdn2561的博客 601

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

freemarker解析json字符串

freemarker解析json字符串freemarker解析json字符串效果图片模拟后台传过来的 json 字符串text在 ftl 页面进行解析 freemarker解析json字符串 效果图片 模拟后台传过来的 json 字符串text java对象中的字段 /** * 格式: * { "number": { "one": "111", ...

LiGuogang 7400

freemarker解析失效

今天出现了freemarker解析失效得问题,页面直接显示了类似于“${username}”的字符串,检查发现是servlet.xml文件出的问题,freemarker已经配置了视图解析器,原本springMVC的已经不需要了,如图: ...

just_give_up的博客 1893

FreeMarker 解析复杂 Map

项目使用的是 FreeMarker,因为逻辑比较复杂,所以后台传递的数据结构设计的是这样子的:

mikey219的专栏 1015

freemarker解析模板文件

// templatePath模板文件存放路径 // templateName 模板文件名称 // filename 生成的文件名称 public static void analysisTemplate(String templatePath, String templateName, String fileName, Map root) { try { ...

u014655316的专栏 646

java解析freemarker文件或模板内容

java解析ftl freemarker文件一般是控制器返回后有freemarker控制器进行解析,在这里我们在java代码中解析freemarker文件 package com.my.utils; import freemarker.template.Template; import freemarker.template.TemplateException; import org.apac...

Michean的博客 5768

FreeMarker解析json数据

简单的json格式数据在freemarker中可以直接解析,无需转为list。下面是简单示例: 1.嵌套的json解析 &lt;div class="atricle-text"&gt; &lt;!--assign指令用于在页面上定义一个变量,这儿定义了一个名称为text的json格式变量,下面普通的json解析是属于后台传递过来的--&gt; &lt;#assign text&gt; ...

鱼儿眼中的海 1万+

简单的freemarker解析测试

本文是一个很简单很基础的Freemarker模板解析测试类,复杂的也是在此基础上添加一些代码优化而来,懂得基础流程后就能融会贯通了 POM: <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> &lt...

weixin_30339969的博客 139

freemarker模板解析过程

例如:一个freemarker表达式<body> ${hello} </body>,会被解析成三个部分,分别是<body>${hello}</body>前面和后面的body标签,在freemarker中被定义为TextBlock,中间的变量定义为DollarVariable。那么目前的结构也就是RootExpression = TextBlock D...

weixin_34406796的博客 494

spring配置freemarker视图解析器

freemarker是一个利用ftl模板和ftl标签来生成自己想要的页面,楼主用了freemarker之后感觉比jsp好用。下面是springmvc配置freemarker视图解析器: class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" parent="viewResolver">

卡夫卡 1424
上一篇: 高效学习JQuery
下一篇: ibatis高效学习
梦魇中
博客等级 码龄8年 1粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值