当前位置: 首页 > news >正文

Freemarker快速入门

Freemarker概述

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
在这里插入图片描述

环境搭建

  1. 工程依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- apache 对 java io 的封装工具库 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version></dependency></dependencies>
  1. application.yml配置文件
server:port: 8881 #服务端口
spring:application:name: freemarker-demo #指定服务名freemarker:cache: false  #关闭模板缓存,方便测试settings:template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试suffix: .ftl               #指定Freemarker模板文件的后缀名

在resources\templates\目录下创建01-basic.ftl文件

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>Hello World!</title>
</head>
<body>
<b>普通文本 String 展示:</b><br><br>
Hello ${name} <br>
<hr>
<b>对象Student中的数据展示:</b><br/>
姓名:${stu.name}<br/>
年龄:${stu.age}
<hr>
</body>
</html>

创建控制器

package com.heima.freemarker.controller;import com.heima.freemarker.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class HelloController {@GetMapping("/basic")public String hello(Model model){model.addAttribute("name","freemarker");Student student = new Student();student.setName("小明");student.setAge(18);model.addAttribute("stu",student);return "01-basic";}
}

Freemarker指令语法

基础语法

  1. 注释:<#-- -->
  2. 插值:${…}部分,freemarker会用真实的值代替${…}
  3. FTL(FreeMarker Template Language)指令:<# >FTL指令</#>
  4. 文本:不加任何标记会被直接输出

FTL指令

  • 集合指令-List:<#list></#list>
<#list stus as stu><tr><td>${stu_index+1}</td> <!--从零开始--><td>${stu.name}</td><td>${stu.age}</td><td>${stu.money}</td></tr></#list>

上面的stus是model中的一个列表属性。

  • 集合指令-Map
输出stu1的学生信息:<br/>
姓名:${stuMap['stu1'].name}<br/>
年龄:${stuMap['stu1'].age}<br/>
<br/>
<a href="###">方式二:通过map.keyname.property</a><br/>
输出stu2的学生信息:<br/>
姓名:${stuMap.stu2.name}<br/>
年龄:${stuMap.stu2.age}<br/><br/>

变量map

 <#list stuMap?keys as key><tr><td>${key_index+1}</td><td>${stuMap[key].name}</td><td>${stuMap[key].age}</td><td>${stuMap[key].money}</td></tr></#list>
  • if指令
<#if expression>
<#else>
</#if>

在freemarker中,判断是否相等,=与==号等价

空值处理

  1. 判断某变量是否存在使用“??”
    用法为:variable??,如果该变量存在,返回true,否则返回false
<#if stus??><#list stus as stu></#list>
</#if>
  1. 缺失变量默认使用"!"
    列如,${name!‘’}表示如果name为空显示空字符串

内建函数

内建函数语法格式:变量+?+函数名称

  1. stus集合的大小:${stus?size}
  2. 日期格式化:
    在这里插入图片描述3. 将json字符串转为对象
<#assign text="{'bank':'工商银行','account': '102313213123'}">
<#assign data=text?eval/>
开户行:${data.bank} 账号:${data.account}

输出静态化文件

实现思路

使用freemarker原生Api将页面生成html文件
在这里插入图片描述

@SpringBootTest(classes = FreemarkerDemoApplication.class)
@RunWith(SpringRunner.class)
public class FreemarkerTest {@Autowiredprivate Configuration configuration;@Testpublic void test() throws IOException, TemplateException {Template template = configuration.getTemplate("02-list.ftl");/*** 合成方法*/template.process(getData(),new FileWriter("g:/list.html"));}private Map getData(){Map<String,Object> map = new HashMap<>();//------------------------------------Student stu1 = new Student();stu1.setName("小强");stu1.setAge(18);stu1.setMoney(1000.86f);stu1.setBirthday(new Date());//小红对象模型数据Student stu2 = new Student();stu2.setName("小红");stu2.setMoney(200.1f);stu2.setAge(19);//将两个对象模型数据存放到List集合中List<Student> stus = new ArrayList<>();stus.add(stu1);stus.add(stu2);//向model中存放List集合数据map.put("stus",stus);//------------------------------------//创建Map数据HashMap<String,Student> stuMap = new HashMap<>();stuMap.put("stu1",stu1);stuMap.put("stu2",stu2);// 3.1 向model中存放Map数据map.put("stuMap", stuMap);return map;}
}

文章转载自:

http://VkVfpAdO.xprzq.cn
http://BiE2IQrD.xprzq.cn
http://DTKBoGQD.xprzq.cn
http://jOEATRgE.xprzq.cn
http://FzpJAjH4.xprzq.cn
http://h2JUd7Mv.xprzq.cn
http://QJ7PykzA.xprzq.cn
http://UfzZkVaH.xprzq.cn
http://QM4Fsrb7.xprzq.cn
http://P5B0EVW5.xprzq.cn
http://lVC5bvem.xprzq.cn
http://Q6petrT4.xprzq.cn
http://j2s20r9d.xprzq.cn
http://61oRPFl3.xprzq.cn
http://HO2QYA3i.xprzq.cn
http://Mt6O2d2d.xprzq.cn
http://2QFuCgO5.xprzq.cn
http://LMPppSoo.xprzq.cn
http://HOcoBL1p.xprzq.cn
http://15hZRYIj.xprzq.cn
http://J56xyU3A.xprzq.cn
http://7BrNmhHs.xprzq.cn
http://ObmM1oJg.xprzq.cn
http://50pf7iLl.xprzq.cn
http://bUakPSpT.xprzq.cn
http://WRo6hm2q.xprzq.cn
http://U6P4C5fm.xprzq.cn
http://tEjAoQjy.xprzq.cn
http://5cvhLjja.xprzq.cn
http://2B42pOEE.xprzq.cn
http://www.dtcms.com/a/228839.html

相关文章:

  • js实现可折叠的列表或菜单
  • 【亲测有效 | Cursor Pro每月500次快速请求扩5倍】(Windows版)Cursor中集成interactive-feedback-mcp
  • Java:跨越时代的编程语言,持续引领技术革新
  • 虚拟现实教育终端技术方案——基于EFISH-SCB-RK3588的全场景国产化替代
  • 软件评测师 综合测试 真题笔记
  • 【数据中心设计】
  • 《Effective Python》第六章 推导式和生成器——总结(基于智能物流仓储监控系统的数据处理)
  • 原始数据去哪找?分享15个免费官方网站
  • IP话机和APP拨打电话的区别
  • MidJourney入门学习
  • Spring AI介绍及大模型对接
  • [Java 基础]Java 是什么
  • 【QT】QString 与QString区别
  • 项目交付后缺乏回顾和改进,如何持续优化
  • 文件IO流
  • saveOrUpdate 有个缺点,不会把值赋值为null,解决办法
  • 笔记︱数据科学领域因果推断案例集锦(第三弹)
  • 爱普生Epson L3210打印机信息
  • LabVIEW磁悬浮轴承传感器故障识别
  • 金融中的线性优化:投资组合分配与求解器 - Part 2
  • SpringBoot系列之RabbitMQ 实现订单超时未支付自动关闭功能
  • 【氮化镓】GaN HMETs器件物理失效分析进展
  • 正点原子lwIP协议的学习笔记
  • 关于list集合排序的常见方法
  • 网络爬虫 - App爬虫及代理的使用(十一)
  • CodeTop100 Day21
  • Python微积分可视化:从导数到积分的交互式教学工具
  • 【Typst】1.Typst概述
  • 详解代理型RAG与MCP服务器集成
  • Java中并发修改异常如何处理