Java操作FreeMarker模板引擎的基本用法示例小结

要在Java中使用FreeMarker模板引擎进行模板渲染,需要经历以下几个步骤:

要在Java中使用FreeMarker模板引擎进行模板渲染,需要经历以下几个步骤:

  1. 引入FreeMarker依赖

在Maven项目中,可以在pom.xml文件中添加以下依赖项:

<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker</artifactId>
  <version>${freemarker-version}</version>
</dependency>
  1. 创建FreeMarker配置对象

FreeMarker需要一个Configuration对象来控制引擎的模板查找路径、编码方式等配置。通过Configuration对象可以创建出Template对象,进而使用模板进行渲染操作。

Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setClassForTemplateLoading(FreeMarkerDemo.class, "/templates");
cfg.setDefaultEncoding("UTF-8");

上述代码创建了一个2.3.31版本的Configuration对象,设置加载模板的路径为“/templates”,默认使用UTF-8编码解析模板。

  1. 加载模板

FreeMarker支持从Classpath、文件系统等多种方式加载模板,具体使用哪种方式根据具体情况而定。我们以从Classpath中加载模板为例:

Template template = cfg.getTemplate("hello.ftl");

上述代码加载了名为“hello.ftl”的模板。

  1. 渲染模板

FreeMarker使用Template对象进行模板的渲染操作,通过向模板传递数据模型,即可得到最终的渲染结果。以下示例代码将通过用户输入的名字渲染一个问候页面:

// 定义要渲染的数据模型
Map<String, Object> model = new HashMap<>();
model.put("name", "小明");

// 加载名为hello.ftl的模板
Template template = cfg.getTemplate("hello.ftl");

// 向模板传递数据模型,得到渲染结果
try (StringWriter out = new StringWriter()) {
    template.process(model, out);
    System.out.println(out.toString());
} catch (IOException | TemplateException e) {
    e.printStackTrace();
}

在上述代码中,我们首先定义了一个名为“model”的数据模型,其中包含了一个名为“name”的属性,表示用户的名字。然后通过getTemplate方法加载名为hello.ftl的模板对象。最后,调用process方法向模板传递数据模型并执行模板渲染,将渲染结果输出到控制台上。

  1. 使用模板指令

FreeMarker支持多种模板指令,例如if、foreach、include等指令。以下代码演示了如何使用if指令判断用户是否已经登录:

// 定义要渲染的数据模型
Map<String, Object> model = new HashMap<>();
model.put("name", "小明");
model.put("loggedIn", true);

// 加载名为hello.ftl的模板
Template template = cfg.getTemplate("hello.ftl");

// 向模板传递数据模型,得到渲染结果
try (StringWriter out = new StringWriter()) {
    template.process(model, out);
    System.out.println(out.toString());
} catch (IOException | TemplateException e) {
    e.printStackTrace();
}

在上述代码中,我们新增了一个名为“loggedIn”的属性,表示用户是否已经登录。在模板中,我们使用if指令判断用户是否已经登录:

<#if loggedIn>
  <p>您已经登录,欢迎您,${name}!</p>
<#else>
  <p>您还没有登录,请先 <a href="/login">登录</a>。</p>
</#if>

在模板中,使用${}语法可以输出数据模型中的属性值。如果loggedIn为true,则输出“您已经登录,欢迎您,小明!”,否则输出“您还没有登录,请先登录。”。

  1. 示例说明

以下示例代码演示了如何使用FreeMarker生成一个HTML表格:

// 定义要渲染的数据模型
Map<String, Object> model = new HashMap<>();
model.put("headers", new String[] { "姓名", "年龄", "性别" });
model.put("rows", new Object[][] {
        { "小明", 18, "男" },
        { "小红", 20, "女" },
        { "张三", 22, "男" },
});

// 加载名为table.ftl的模板
Template template = cfg.getTemplate("table.ftl");

// 向模板传递数据模型,得到渲染结果
try (StringWriter out = new StringWriter()) {
    template.process(model, out);
    System.out.println(out.toString());
} catch (IOException | TemplateException e) {
    e.printStackTrace();
}

在上述代码中,我们首先定义了一个名为“headers”的数组,表示表格的列头。然后定义了一个名为“rows”的二维数组,表示表格的行数据。在模板中,我们使用foreach指令遍历headers和rows数组,生成一个HTML表格:

<table>
  <thead>
    <tr>
      <#list headers as header>
        <th>${header}</th>
      </#list>
    </tr>
  </thead>
  <tbody>
    <#list rows as row>
      <tr>
        <#list row as cell>
          <td>${cell}</td>
        </#list>
      </tr>
    </#list>
  </tbody>
</table>

在模板中,使用<#list>指令遍历数组,使用${}语法输出数组中的元素。最终渲染结果如下所示:

<table>
  <thead>
    <tr>
      <th>姓名</th>
      <th>年龄</th>
      <th>性别</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>小明</td>
      <td>18</td>
      <td>男</td>
    </tr>
    <tr>
      <td>小红</td>
      <td>20</td>
      <td>女</td>
    </tr>
    <tr>
      <td>张三</td>
      <td>22</td>
      <td>男</td>
    </tr>
  </tbody>
</table>

以上是Java操作FreeMarker模板引擎的基本用法示例小结,通过以上步骤可以了解到如何加载模板、渲染模板、使用模板指令等操作。

本文标题为:Java操作FreeMarker模板引擎的基本用法示例小结

基础教程推荐