Freemarker基本语法

本文详细介绍了Freemarker的基础语法,包括变量表达式、指令、注释、插值表达式、宏定义、函数定义、数据模型操作、遍历、运算符、空值处理和内建函数。此外,还探讨了如何使用Freemarker生成静态文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Freemarker基础语法种类:

1.变量表达式

<#assign name = "John Doe">
Hello, ${name}!

2.指令

<#if age > 18>
You are an adult.
<#else>
You are a minor.
</#if>

3.注释

<#-- This is a comment -->

4.插值表达式

<p>The current time is #{.now}</p>

5.宏定义

<#macro greeting name>
Hello, ${name}!
</#macro>

<@greeting name="John Doe" />

6.函数定义

<#function addNumbers x y>
<#return x + y>
</#function>

<#assign result = addNumbers(5, 10)>

7.引入外部数据模型

<#import "com.example.Model" as model>
<#assign user = model.User(name = "John Doe", age = 25)>
<p>User name: ${user.name}</p>

8.include指令

<#include "header.ftl">
<p>This is the body of the page.</p>
<#include "footer.ftl">

9.继承和覆盖

基础模板(base.ftl):

<html>
<head>
<title>${title}</title>
</head>
<body>
<#block "content">
This is the content of the page.
</#block>
</body>
</html>

子模板(child.ftl):

<#include "base.ftl">
<#override "content">
This is the overridden content of the page.
</#override>

Freemarker遍历List集合:

在Freemarker中遍历List集合可以使用<#list>指令。下面是一个示例:

<#list listVariable as listItem>
    ${listItem}
</#list>

其中,listVariable是List类型的变量名,listItem是在迭代过程中每个元素的引用。在循环体内部,可以使用listItem来访问每个元素的值。

例如,如果有一个List<Integer>类型的变量numbers,可以这样遍历:

<#list numbers as number>
    ${number}
</#list>

在循环体内部的${number}将输出列表中的每个整数。

除了简单遍历外,还可以在<#list>指令中使用index来获取元素的索引值:

<#list listVariable as listItem index>
    ${index+1}. ${listItem}
</#list>

这样可以在循环体内部输出每个元素的索引值加上对应的内容。

需要注意的是,<#list>指令的结束标签</#list>是必须的,在循环体内部的内容将被迭代多次。

Freemarker获取map中的数据:

在Freemarker中获取Map中的数据可以使用.操作符。下面是一个示例:

假设有一个Map类型的变量map,包含以下键值对:

map.put("name", "Alice");
map.put("age", 25);

要获取map中的数据,可以使用以下语法:

${map.name}
${map.age}

${map.name}将输出"Alice",${map.age}将输出"25"。

如果要访问Map中的嵌套数据,可以使用.操作符来连续访问键。例如,如果有一个Map类型的变量person,包含以下键值对:

Map<String, Object> person = new HashMap<>();
Map<String, Object> address = new HashMap<>();
address.put("city", "New York");
address.put("state", "NY");
person.put("name", "Alice");
person.put("address", address);

要获取person中的地址(city和state),可以使用以下语法:

${person.address.city}
${person.address.state}

${person.address.city}将输出"New York",${person.address.state}将输出"NY"。

这样可以通过.操作符从嵌套的Map中获取数据。

Freemarker运算符:

Freemarker中支持多种运算符,用于在模板中进行各种计算和比较操作。以下是一些常用的Freemarker运算符:

1.算术运算符:

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:取模运算

示例:

${num1 + num2} // 加法运算
${num1 - num2} // 减法运算
${num1 * num2} // 乘法运算
${num1 / num2} // 除法运算
${num1 % num2} // 取模运算

2.比较运算符

  • ==:等于
  • !=:不等于
  • &lt;:小于
  • >:大于
  • &lt;=:小于等于
  • >=:大于等于

示例:

<#if num1 == num2>
    num1 等于 num2
<#else>
    num1 不等于 num2
</#if>

<#if num1 < num2>
    num1 小于 num2
<#else>
    num1 大于等于 num2
</#if>

3.逻辑运算符:

  • &&:逻辑与
  • ||:逻辑或
  • !:逻辑非

示例:

<#if (num1 > 0) && (num2 < 10)>
    num1 大于 0,num2 小于 10
</#if>

<#if (num1 <= 0) || (num2 >= 10)>
    num1 小于等于 0,num2 大于等于 10
</#if>

<#if !(num1 == num2)>
    num1 不等于 num2
</#if>

4.其他运算符:

  • ():括号用于改变运算的优先级
  • ?::三元运算符,类似于Java的condition ? trueValue : falseValue

示例:

${(num1 + num2) * num3} // 加法运算的结果与 num3 相乘

${(num1 > num2) ? "num1 大于 num2" : "num1 小于等于 num2"} // 三元运算符

Freemarker空值处理:

在Freemarker中,你可以使用内建函数和指令来处理空值(null)。

  1. 在输出变量时,使用条件判断: 使用<#if>指令来判断变量是否为空,然后根据判断结果输出相应内容。例如:

    <#if variable??>
      ${variable}
    <#else>
      Variable is null
    </#if>
    

    上述代码中,&lt;#if>指令用于判断variable是否为null,如果不为null,则输出变量的值;如果为null,则输出"Variable is null"。

  2. 使用内建函数进行默认值设置:

    • &lt;#default>:该函数用于设置变量的默认值,当变量为null时,使用默认值。例如:

      ${variable!defaultValue}
      

      上述代码中,如果variable为null,则输出defaultValue作为默认值。

    • &lt;#assign>:该指令用于给变量赋值,可以在赋值时使用默认值。例如:

      <#assign variable = anotherVariable!defaultValue>
      ${variable}
      

      上述代码中,如果anotherVariable为null,则将defaultValue赋给variable,然后输出variable的值。

  3. 使用内建函数进行空值判断:

    • &lt;#ifnull>:该函数用于判断变量是否为null,返回truefalse。例如:

      <#if <#ifnull(variable)></#if>>
        Variable is null
      <#else>
        ${variable}
      </#if>
      

      上述代码中,&lt;#ifnull>函数用于判断variable是否为null,如果为null,则输出"Variable is null";否则输出变量的值。

Freemarker内建函数:

Freemarker内建函数是Freemarker自带的一些函数,可以在模板中直接使用。这些函数用于在模板中进行一些常见的操作和计算,例如字符串处理、日期格式化、集合操作等。

下面是一些常用的Freemarker内建函数:

  1. 字符串处理函数:

    • capitalize:将字符串首字母大写。
    • lower_case:将字符串转换为小写。
    • upper_case:将字符串转换为大写。
    • length:获取字符串的长度。
    • trim:去除字符串两端的空格。
  2. 数字处理函数:

    • number:将字符串转换为数字。
    • abs:获取数字的绝对值。
    • ceil:向上取整。
    • floor:向下取整。
    • round:四舍五入。
  3. 集合处理函数:

    • size:获取集合的大小。
    • first:获取集合的第一个元素。
    • last:获取集合的最后一个元素。
    • sort:对集合进行排序。
  4. 日期时间处理函数:

    • now:获取当前时间。
    • date:将字符串转换为日期对象。
    • time:将字符串转换为时间对象。
    • datetime:将字符串转换为日期时间对象。
    • iso_utc:将日期时间对象格式化为ISO 8601格式。

这些内建函数可以直接在Freemarker模板中使用,例如:

${myString?upper_case}
${myNumber?abs}
${myList?size}
${myDate?datetime("yyyy-MM-dd HH:mm:ss")}

除了内建函数,Freemarker还支持自定义函数,可以在模板中使用自己定义的函数来进行特定的处理。

Freemarker静态文件生成:

Freemarker是一种模板引擎,用于生成动态的文本内容。它通常用于生成HTML页面、XML文件、配置文件等。不过,Freemarker本身并不直接提供生成静态文件的功能。

如果你需要使用Freemarker生成静态文件,你可以借助其他工具或框架来实现。以下是一种典型的方法:

1.使用Java程序调用Freemarker:你可以编写一个Java程序,使用Freemarker来渲染模板,并将渲染结果输出到文件。

在这种方法中,你需要引入Freemarker的依赖库,并编写Java代码来实现渲染和输出逻辑。具体步骤包括:

  • 设置Freemarker的配置,包括模板加载路径、字符编码等。
  • 加载模板文件。
  • 创建数据模型,将数据填充到模板中。
  • 使用Freemarker进行渲染,得到渲染结果。
  • 将渲染结果输出到文件。

示例代码如下:

import freemarker.template.Configuration;
import freemarker.template.Template;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class FreemarkerStaticFileGenerator {
    public static void main(String[] args) {
        try {
            // 设置Freemarker的配置
            Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
            cfg.setClassForTemplateLoading(FreemarkerStaticFileGenerator.class, "/templates");
            cfg.setDefaultEncoding("UTF-8");

            // 加载模板文件
            Template template = cfg.getTemplate("myTemplate.ftl");

            // 创建数据模型
            Map<String, Object> dataModel = new HashMap<>();
            dataModel.put("name", "John");
            // 添加其他需要的数据

            // 渲染模板
            StringWriter writer = new StringWriter();
            template.process(dataModel, writer);
            String renderedContent = writer.toString();

            // 输出到文件
            File outputFile = new File("output.html");
            try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter(outputFile))) {
                fileWriter.write(renderedContent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述示例代码中,我们使用freemarker.template.Configuration类来设置Freemarker的配置,freemarker.template.Template类来加载模板,Template.process()方法来渲染模板并输出结果。

2.使用静态网站生成器:另一种方法是使用诸如Jekyll、Hugo、Gatsby等静态网站生成器。这些工具可以将Freemarker模板与其他静态资源(如CSS、JavaScript等)一起生成静态网站。你只需编写Freemarker模板,然后执行相应的生成命令即可。

这种方法的优势是可以利用静态网站生成器提供的其他功能,如自动化部署、前端构建等。

总结来说,要使用Freemarker生成静态文件,你可以使用Java程序调用Freemarker进行渲染并输出到文件,或者结合静态网站生成器进行生成。具体选择取决于你的需求和开发环境。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值