要在Java中使用FreeMarker模板引擎进行模板渲染,需要经历以下几个步骤:
- 引入FreeMarker依赖
在Maven项目中,可以在pom.xml文件中添加以下依赖项:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker-version}</version>
</dependency>
- 创建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编码解析模板。
- 加载模板
FreeMarker支持从Classpath、文件系统等多种方式加载模板,具体使用哪种方式根据具体情况而定。我们以从Classpath中加载模板为例:
Template template = cfg.getTemplate("hello.ftl");
上述代码加载了名为“hello.ftl”的模板。
- 渲染模板
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方法向模板传递数据模型并执行模板渲染,将渲染结果输出到控制台上。
- 使用模板指令
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,则输出“您已经登录,欢迎您,小明!”,否则输出“您还没有登录,请先登录。”。
- 示例说明
以下示例代码演示了如何使用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模板引擎的基本用法示例小结 - Python技术站