FreeMarker静态模版基础语法

FreeMarker基础语法 在 Spring Boot 中的使用详解


FreeMarker 是一款以 简洁性灵活性 见长的模板引擎,尤其适合需要动态生成文本但追求逻辑与展示分离的场景。其清晰的语法、强大的数据驱动能力,使其成为 Java 生态中广泛使用的工具。选择时需权衡项目需求:若需高度交互的现代 Web 应用,可考虑结合前端框架;若侧重服务端渲染或代码生成,FreeMarker 仍是经典选择。
在这里插入图片描述


1. 导入依赖

pom.xml 中添加 Spring Boot 官方提供的 FreeMarker Starter 依赖:

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

Spring Boot 会自动管理版本,无需手动指定。


2. 配置文件(application.yml

src/main/resources/application.yml 中配置 FreeMarker:

spring:
  freemarker:
    template-loader-path: classpath:/templates/  # 模板存放路径
    cache: false  # 开发时关闭缓存,修改模板后立即生效
    charset: UTF-8
    check-template-location: true
    suffix: .ftl  # 模板文件后缀
    content-type: text/html

在这里插入图片描述


3. 简单例子

步骤 1:创建 Controller

@Controller
public class DemoController {
    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("name", "World");
        return "hello"; // 对应 templates/hello.ftl
    }
}

步骤 2:创建模板文件 hello.ftl

<!DOCTYPE html>
<html>
<head>
    <title>FreeMarker Demo</title>
</head>
<body>
    <h1>Hello, ${name}!</h1>
</body>
</html>

访问 http://localhost:8080/hello 会渲染出 Hello, World!


4. 基本语法
  • 插值表达式${variable}
    输出变量值,如 ${user.age}

  • 定义变量

    <#assign price = 100>
    Price: ${price}
    
  • 注释
    <#-- 这是注释,不会输出 -->


5. 集合指令 <#list>

遍历集合(List、数组等):

<#list users as user>
    Index: ${user_index}  <#-- 内置索引(从0开始) -->
    Name: ${user.name}
    <#if user_has_next>, </#if>  <#-- 判断是否是最后一个元素 -->
</#list>

Controller 数据准备

model.addAttribute("users", List.of(
    new User("Alice"),
    new User("Bob")
));

6. if 指令

条件判断:

<#if user.age < 18>
    未成年
<#elseif user.age == 18>
    刚成年
<#else>
    成年人
</#if>

7. 运算符
  • 算术运算符+, -, *, /, %
  • 比较运算符==, !=, >, >=, <, <=
  • 逻辑运算符&&, ||, !
  • 空值处理运算符
    • !:默认值,如 ${name!"Anonymous"}(若 name 为空,显示 “Anonymous”)。
    • ??:判断变量是否存在,如 <#if name??>...

8. 空值处理

避免因变量为 null 导致渲染错误:

  • 默认值

    ${user.address!"No address"}
    
  • 安全判断

    <#if user.address??>
        Address: ${user.address}
    <#else>
        Address not provided.
    </#if>
    

9. 内建函数

FreeMarker 提供丰富的内置函数,通过 ? 调用:

  • 字符串处理

    ${"hello"?upper_case}  <#-- 输出 "HELLO" -->
    ${"Hello"?lower_case?cap_first}  <#-- 输出 "hello" → "Hello" -->
    
  • 日期格式化

    ${now?string("yyyy-MM-dd HH:mm:ss")}
    
  • 集合操作

    ${users?size}  <#-- 集合长度 -->
    ${users?join(", ")}  <#-- 将集合元素拼接为字符串 -->
    
  • 数值处理

    ${price?string.currency}  <#-- 格式化为货币,如 "$100.00" -->
    

总结

通过上述步骤,你可以在 Spring Boot 中快速集成 FreeMarker,利用其强大的模板功能实现动态页面渲染。重点掌握集合遍历、条件判断和空值处理,能有效提升开发效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值