Java模板引擎FreeMarker系列之三FreeMarker基本标签的使用

Freemarker模板引擎与Java 8的完美结合 在软件工程领域,模板引擎是一种将模板与数据结合生成文本输出的软件。其主要任务是处理模板并生成目标文档,它可以将代码逻辑与展示内容分离,提高开发效率,并简化动态网页的生成。Freemarker的配置文件支持多种自定义设置,其中一些关键配置项包括:: 设置模板默认编码格式,例如UTF-8。: 控制模板更新检查的频率,单位为秒。: 是否自动去除模板中的空白字符,用于保持输出的整洁。自定义配置项允许开发者根据实际项目需求,灵活调整Freemarker的行为。 阅读详情
 

在FreeMarker入门教程,相信你还刻模板里的“你好:${username}”,这是简单的输出字符串,和EL很像吧,这一节我们来学其他标签

 

输出对象及判断标签的引用

我们先定义一个用户类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.naxsu.freemarker;
public class User {
     private int id;
     private String name;
     private int age;
     // set get method
     public User( int id, String name, int age) {
         super ();
         this .id = id;
         this .name = name;
         this .age = age;
     }
     public User() {
         super ();
     }
}

模板中输出用户的相关属性值和对年龄的简单判断文件03.ftl如下

1
2
3
4
5
6
7
8
9
${user.id}-----${user.name}-----${user.age}</h1>
  
<# if user.age lt 12 >
     ${user.name}还是一个小孩
<#elseif user.age lt 18 >
     ${user.name}快成年
<# else >
     ${user.name}已经成年
</# if >

测试及输出结果

1
2
3
4
5
6
7
8
9
10
@Test
public void test02() {
     //输出相应的对象
     root.put( "user" , new User( 1 , "李四" , 16 ));
     fu.print( "03.ftl" , root);
   }
 
1 -----李四----- 16 </h1>
  
     李四快成年

 

循环标签的使用

声明两个用户对象,然后在模板文件中循环输出

1
2
3
4
5
6
7
@Test
public void test02() {
       List<User> users = Arrays.asList(
             new User( 1 , "张三" , 22 ), new User( 2 , "李四" , 33 ));
     root.put( "users" ,users);
     fu.print( "03.ftl" , root);
}

模板文件,主要是应用循环标签

1
2
3
<#list users as user>
${user.id}---------${user.name}-------${user.age}
</#list>

输出:

1---------张三-------22

2---------李四-------33

 

页面包含

如果是一个top文件,你想包含在HTML中,即用include 标签

被包含模板文件top.ftl:

1
<h1>欢迎${username}访问我们的系统</h1>

主页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
< html >
< head >
     < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
     < title >Insert title here</ title >
</ head >
< body >
     <#include "/inc/top.ftl"/>
     < hr />
     <#list users as user>
         ${user.id}---------${user.name}-------${user.age}< br />
     </#list>
</ body >
</ html >

测试方法和输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Test
public void test05() {
     root.put( "username" , "管理员" );
     List<User> users = Arrays.asList(
                new User( 1 , "张三" , 22 ), new User( 2 , "李四" , 33 ));
     root.put( "users" ,users);
     fu.print( "05.ftl" ,root);
}
///////////////////////
<html>
<head>
     <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" >
     <title>Insert title here</title>
</head>
<body>
     <h1>欢迎管理员访问我们的系统</h1><hr/>
     1 ---------张三------- 22 <br/>
     2 ---------李四------- 33 <br/>
</body>
</html>

 

处理空值

在这里新添加一个对象Group,在User引用这个对象,没给group对象赋值的情况下测试处理空值的情况。

Group.java

1
2
3
4
5
6
7
8
9
10
11
package com.naxsu.freemarker;
public class Group {
     private String name;
     // set get method
     public Group(String name) {
         super ();
         this .name = name;
     }
     public Group() {
     }
}

在User.java中引用Group对象

1
2
3
4
public class User {
     private Group group;
     //set get method
}

测试方法

1
2
3
4
5
6
@Test
public void test06() {
     //此时user对象并没有group的值
     root.put( "user" , new User( 1 , "地点" , 22 ));
     fu.print( "06.ftl" ,root);
}

 

用!符号可以处理空值,在!号后面加字符串是在此对象不存在的情况下,显示该字符串。

如果对象是空值,并没有在后面加!号,会直接报错。

${user.id}-------${user.name}------${user.group!}

${user.id}-------${user.name}------${user.group!"此时user对象并没有group的值"}

1-------地点------

1-------地点------此时user对象并没有group的值

 

下面也会出错,因为此方式加!freemarker仅仅只会判断group.name是不是空值

${user.group.name!}

此问题的解决方案是把整个导航用小括号包起来,然后再加!

${(user.group.name)!"没有任何值存在"}

 

普通的字符串也可以用!来获取空值:

${(a.b)!"没有a.b元素"}

没有a.b元素

 

在if标签中可以用两个问号来判断是否为空

<#if (a.b)??>

   不为空

<#else>

   为空

</#if>

为空

 

定义变量

<#--定义变量-->

<#assign username="张三"/>

${username}

@Test

public void test07() {

   root.put("now",new Date());

   root.put("username", "李四");

   fu.print("07.ftl",root); }

张三

FreeMarker模板引擎:创建自定义分页标签宏指南 本文还有配套的精品资源,点击获取 简介:FreeMarker是一个用于生成动态文档的模板引擎,在Java Web开发中常用。本文介绍了如何在FreeMarker中实现自定义分页标签宏,以便更有效地管理和展示大量数据。我们首先定义了一个名为 paging 的宏,接收当前页数、总页数、每页记录数等参数,并在模板中调用。宏内部通过HTML和FreeMarker指令创... 阅读详情

相关推荐

MCU中GPIO口的驱动方式

MCU中GPIO口的驱动方式 导读: MCU芯片中GPIO口的驱动方式大的可分为输出和输入两类,小的分可以分为8种。 一、四种输入方式 ①上拉输入: 上拉输入抗干扰能力强,特别适合接地信号的输入(比如低电平有效的按键信号输入)。其工作原理如图1所示。 I/O 端口与TTL 施密特触发器之前接入了一个30K~50K 欧姆的上拉电阻,当I/O 端口悬空时,此时MCU 也能读到稳定的高电平状态,...

优快云Frewen的博客 3374

FreeMarker基本标签的使用

上一节我们接触了一个FreeMarker很简单的例子FreeMarker入门教程 ,说到底,就是替换模板里相应的标签,这一节我们写一下FreeMarker基本标签的使用 。   在FreeMarker入门教程 ,相信你还刻模板里的“你好:${username}”,这是简单的输出字符串,和EL很像吧,这一节我们来学其他标签 输出对象及判断标签的引用 我们先定义一个用户类...

naxsu的专栏 262

Agv、Rgv 车辆控制调度系统开发第一篇

Agv、Rgv 车辆控制调度系统第一篇为什么要做这个系统先看作品从头讲起算法讲解编程语言从哪里开始继续深入预告 为什么要做这个系统 说白了是为了赚钱,在一个项目中发现公司买别人家的调度系统要几十万,还只是一个项目的实施,从那天起我就决定自己写一套,用了一年的时间写出来后,才发现根本卖不掉,卖不掉就卖不掉吧,反正我现在已经吧写这套系统当成了一种乐趣,如果不让我写了我反而不适应,但是没有人欣赏我的成果我反而很难受,所以决定吧这个系统的创作过程,写下来,给后面的人一些建议,少走点弯路。 先看作品 从头讲起 在

持续分享调度系统开发过程 2万+

记一次freemarker的使用(从数据库中取出freemarker模板,并展示)

刚接手的项目,freemarker模板是在枚举中定义好的,当需要添加或者修改时,需要在枚举中手动写入,并增加相对应的html/ftl文件 在这些添加完之后,就需要重新发布(因为项目每次部署要2-30分钟); 新的需求是,free marker模板可配置; 在一开始的想法是将模板放入数据库中,因为没有使用过free marker,先去查阅了在线手册添加链接描述及其他资料; ...

cc911103的博客 2322

Windows平台无人机仿真:从零搭建SITL环境与QGC联调

本文详细指导了在Windows平台上从零搭建无人机软件在环(SITL)仿真环境,并与QGroundControl(QGC)进行联调的完整流程。通过使用Cygwin工具链,开发者可以在没有实体硬件的情况下,模拟运行ArduPilot飞控,并通过MAVLink协议连接QGC地面站进行全功能测试,为无人机软件开发提供了一个安全、经济的虚拟沙盒环境。

weixin_29239279的博客 411

Java农产品质量溯源大数据管理系统源码

产品追溯基于“一物一码”从工厂生产环节至销售阶段,赋予产品唯一的数码,并关联产品名称、批号、生产时间等信息,建立包装关联关系,为后期产品的追溯、营销搭建信息基础。 农产品溯源,从原材料收购、生产、加工质检到包装运输、终端门店销售等环节追溯,可以保证产品质量,监管部门和消费者都可以查询产品信息。对生产进行层层把关、一旦发现问题、立即进行处理、提升产品质量。

xingchen优快云的博客 1805

Java中使用freemarker教程之list循环

转载: https://blog.youkuaiyun.com/Cheung1021/article/details/6146239使用参考: spring boot入门之web篇在Freemarker应用中经常会遍历List获取需要的数据,并对数据进行排序加工后呈现给用户。那么在Freemarker中如何遍历...

W 7828

【ESP32设备通信】-LoRa通信

在本文中,我们将使用 Arduino IDE 将 ESP32 与 LoRa SX1278 (Ra-02) 模块连接起来。 我们将创建一个真实的示例项目,通过 LoRa 无线打开/关闭 LED 进行演示。

视觉与物联智能 1890

freemarker 指令控制新闻列表标题样式

freemarker 指令控制新闻列表标题样式

小哈力----一个小前端工程师 445

基于Simulink的转向控制系统仿真建模示例

本文完成了基于 Simulink 的 EPS 转向控制系统仿真,实现了:✅掌握 EPS 助力控制基本原理✅构建车速敏感的可变助力策略✅在 Simulink 中验证低速轻便、高速沉稳的手感✅达成“安全、舒适、高效”的现代转向系统。

xiaoheshang_123的博客 87

基于Xilinx XDMA 的PCIE通信

基于Xilinx XDMA 的PCIE通信 概述:   想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。实践实践!!! 说明: 参考文档: PCI Express Base Specification Revision 3.0 PCI Express Base Specification Revision 5.0 pg195-pcie-dma PCI Express体系

Crazzy_M的博客 1万+

FreeMarker基础(二) FTL常用标签及语法

判断对象是否存在,若成立说明存在             判断知否和某一个值相等(先判断是否存在,在判断相等,如果该指定的参数不存在还比较相等的话就回出错)   list循环(循环遍历list并给遍历的对象取别名attribute以方便后面对象调用),if_exists在调用一个变量需要先判断是否为空不然为空时会出错,_index为取出行号索引从0开始,?size可以判断lis

babyZeng 1万+

【通信原理】基于【MATLAB】的通信OFDM系统仿真

主要进行OFDM系统的仿真,使用MATLAB软件对OFDM系统的接收端和发射端分别进行模拟仿真。

ALi.S的博客 5792

Java项目中利用Freemarker模板引擎导出--生成Word文档

应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 在项目中难免和各种数据报表打交道,如导出XX申请表,登记表,推荐表之类。就可以通过现有信息导出Word文档。基于Java语言来导出Word文档的方式也有很多种,如Jacob,Apache POI,Freemarker,PageOffice,java2word 等等。。。。 在这里将通过Freemarker这个模板引擎来实现导出 Word,项目不限于Swing,SSH,SSM,Spring Boot 之类的。。。。。。。

CJCC白朴的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

模板引擎Freemarker使用教程

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

2402_84949062的博客 5033

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Freemarker基本语法与案例讲解

Freemarker是一个Java模板引擎,用于生成动态的网页、电子邮件、XML文档、JSON等内容。它基于模板和数据模型,将数据与模板进行结合。

万维网连五洲,二进制写尽天下事,喜欢结识新伙伴寻找志同道合的朋友,欢迎一起探讨学习 5570

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java使用FreeMarker模板引擎动态生成html页面

因一个功能需要动态生成HTML文件,所以接触了下FreeMarker模板引擎。一般可以使用该模板引擎来生成月报,日报,单据报表等等。我们都知道预先生成静态HTML文件,当访问时可以提高效率的。 Freemarker简单介绍 Freemarker是一款模板引擎,基于模板用来生成文本(任何来自HTML格式的文本用来生成源代码)的通用工具。FreeMarker实际上是被设计生成HTML页面的,尤其是...

田野上的风筝 1万+

springboot中Thymeleaf和Freemarker模板引擎的区别

目录前言Thymeleaf和Freemarker的区别配置文件pom.xmlapplication.ymlThymeleafFreemarker后记 前言 这两个都是属于模板引擎,但是各有各的好处, enn,在市面上比较多的也就是jsp、freemarker、velocity、thymeleaf等页面方案。 Thymeleaf和Freemarker的区别 FreeMarker是一个用Java语言编...

旺旺的博客 1万+

【Java开发】之模板引擎 freemarker

目录 一、简介 二、FreeMarker 实战 三、Freemarker 常用标签 一、简介 1、FreeMarker 介绍 FreeMarker 是一款 基于模板和要改变的数据 的模板引擎, 是用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 FreeMarker 模板的工作方式为 MVC(模型、视图、控制器)模式,常用来在 MVC 模式的 Web 开发框架中生成 HTML 页面。

王廷云的博客 2357

使用 FreeMarker 模板引擎实现动态邮件发送(Java 技术栈)

本文介绍了在Spring Boot项目中整合FreeMarker模板引擎实现邮件发送功能的技术方案。文章首先分析了模板引擎的必要性,指出其能解决静态邮件内容拼接繁琐、支持动态数据绑定和提高模板复用性等问题,并强调了FreeMarker作为纯Java实现的优势。随后详细讲解了技术实现步骤:1) Maven依赖配置;2) application.yml中邮件服务和FreeMarker的完整配置;3) 编写响应式邮件模板(.ftl文件);4) 核心代码实现,包括控制器、邮件服务、模板渲染和验证码缓存等模块。最后通

2403_87416698的博客 2360

前端模板引擎 -- Freemarker

一、Freemarker介绍 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,简单来讲就是模板加数据模型,然后输出页...

来日可期的博客 5004

Java工具11-Java模板引擎:Thymeleaf与Freemarker

Java模板引擎对比:Thymeleaf与Freemarker 核心差异分析: 语法设计: Thymeleaf采用HTML属性语法(th:text),支持静态原型预览 Freemarker使用独立指令语法(<#if>),需预编译 集成性: Thymeleaf与Spring生态深度集成,是Spring Boot默认引擎 Freemarker作为通用模板引擎,在非Spring场景更灵活 性能表现: Freemarker解析速度更快(字节码预编译) Thymeleaf首次加载较慢但缓存后性能接近 开发

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

【Freemarker】Freemarker简介以及基本使用

【Freemarker】Freemarker简介以及基本使用1. 什么是Freemarker?2. Freemarker 快速入门2.1 环境搭建2.2 创建模板文件2.3 生成文件3. Freemarker 基本指令3.1 assign 指令3.2 if 指令3.3 list 指令3.4 include 指令4. 联合使用指令5. 常用内建函数6. 处理不存在的变量 1. 什么是Freemarker? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网

来日浅谈的博客 3159

Freemarker模板引擎

FreeMarker 是。根据前边的数据模型分析,课程预览就是把课程的相关信息进行整合,在课程预览界面进行展示,课程预览界面与课程发布的课程详情界面一致,保证了教学机构人员发布前看到什么样,发布后也会看到什么样。freemarker提供很多指令用于解析各种类型的数据模型,参考地址:http://freemarker.foofun.cn/ref_directives.html。所以模板引擎就是:模板+数据=输出,Jsp页面就是模板,页面中嵌入的jsp标签就是数据,两者相结合输出html网页。

Relievedz的博客 984

Freemarker模板引擎技术

问题】当渲染文章数据时,由于文章的数据很多,直接去查询文章内容表的话,效率比较低。解决】使用freemarker将文章的内容通过模板技术生成静态的html文件存储到minio中,这样用户就只需要拿着minio的url去minio里获取静态页面即可。效率大大提高。

qq_57882997的博客 1700
上一篇: Java模板引擎FreeMarker系列之二helloword
下一篇: Java模板引擎FreeMarker系列之四FreeMarker基本数据类型
韩慧兵
博客等级 码龄15年 170粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值