FreeMarker
FreeMarker
FreeMarker是什么
FreeMarker基本语法
基本使用案例
FreeMarker是什么
如官方文档写的一般,FreeMarker是一款模板引擎:基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具
也就是说,基于FreeMarker,你可以对已有的模板进行“换皮”:修改特定的字段–把所有时间换位当天;添加特定的数据–依据传入快速生成列表等等
FreeMarker基本语法
FreeMarker文件(FTL .ftl 文件)主要为以下四部分混合而成
文本:静态部分,会原封不动的输出
插值:会被替换掉的值,由 ${ } 中的对象属性值替换
默认值设置使用 !
- ${user!”用户为空”} user为空时返回 用户为空
内建函数使用?
- ${user_name?upper_case} 把user_name里面的全部字符转换为大写
- $(user?index) 获取用户的下标(user是users数组遍历的对象)
FTL标签:类似于HTML的标签,用于给与FreeMarker指示,如<#if 判断> 可以进行if判断、<#list 数组 as 个体>可以进行遍历等
注释:用于提示开发人员的文本信息,会被FreeMarker忽视,由 <#– –> 分隔
基本使用案例
第一步: 引入Jar包
<!-- https://freemarker.apache.org/index.html -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.32</version>
</dependency>
第二步:编写模板
<html>
<head>
<title>IT蛋官网</title>
</head>
<body>
<h1>欢迎来到IT蛋的简单模板页面</h1>
<ur>
<#-- 渲染导航条-FTL标签 -->
<#list menuItems as item>
<li> <a href="${item.url}">${item?index} ${item.label}</a></li>
</#list>
</ur>
<#-- 底部版权信息 -->
<footer>
${currentYear} IT蛋官网. All rights reserved.
</footer>
</body>
</html>
第三步:基于FreeMarker调用模板
public class FreeMarkerTest {
@Test
public void test() throws IOException, TemplateException {
//new出 Configuration 对象参数为 FreeMarker 版本号
Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);
//指定模板文件所在的路径
configuration.setDirectoryForTemplateLoading(new File("src/main/resources/templates"));
// 设置模板文件使用的字符集
configuration.setDefaultEncoding("utf-8");
configuration.setNumberFormat("0.#####");
// 创建模板对象,加载指定模板
Template template = configuration.getTemplate("myweb.html.ftl");
// 使用模板
...
// 结束
//关闭流
out.close();
}
}
//第四步:创建数据模型,调用FreeMarker创建模板
// 使用模板
// 创建数据模型
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("currentYear", 2024);
List<Map<String,Object>> menuItems = new ArrayList<>();
Map<String,Object>menuItem1 = new HashMap<>();
menuItem1.put("url", "www.baidu.com");
menuItem1.put("label", "百度");
Map<String,Object>menuItem2 = new HashMap<>();
menuItem2.put("url", "www.baidu.com");
menuItem2.put("label", "百度2");
menuItems.add(menuItem1);
menuItems.add(menuItem2);
dataModel.put("menuItems",menuItems);
Writer out = new FileWriter("myweb.html");
// 执行FreeMarker
template.process(dataModel, out);
// 结束
结果:– 》
<html>
<head>
<title>IT蛋官网</title>
</head>
<body>
<h1>欢迎来到IT蛋的简单模板页面</h1>
<ur>
<li> <a href="www.baidu.com">0 百度</a></li>
<li> <a href="www.baidu.com">1 百度2</a></li>
</ur>
<footer>
2024 IT蛋官网. All rights reserved.
</footer>
</body>
</html>
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 IT蛋的个人博客!