FreeMarker小记

指令说明

01、[#ftl] 或 <#ftl>

  • 如果在ftl文件头加上[#ftl]或<#ftl>,则说明文件里其他指令也都要使用方括号([])或尖括号(<>)
  • 若文件头没有使用[#ftl]或<#ftl>,则以文件里第一个指令为准,使用[]或<>
  • 也可在JAVA中指定:
configuration.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX);

02、[#compress]

[#compress]    [#-- 可以去除模板中的空格、制表符等空字符串 --]
[@compress single_line=true] ... [/@compress ]    [#-- 将渲染后的内容在一行输出,可有效去除模板中可能存在的\r\n、\n等字符 --]

03、[#list]

[#-- 遍历List --]
[#list names as name]
	- ${name}
[/#list]
[#list models as model]
	- ${model.age}
[/#list]

[#-- 遍历Map,map值无法通过xxx.get(key)来直接获取,须遍历获取 --]
[#list dataMap?keys as key]
	key: ${key} <br />
	value: ${dataMap.get(key)} <br />
[/#list]
[#list dataMap as key, value]
	key: ${key} <br />
	value: ${value} <br />
[/#list]

04、[#if]

[#if xxx] ... [/#if]
[#if xxx] ... [#else] ... [/#if]

05、[#assign]

[#assign count = 0 /]
[#assign mapKey = name + "_" + model.age /]

06、判断是否存在

[#if name??]    [#-- 若name存在 --]
${num!21}    [#-- 若num不存在,则取默认值21 --]
${(dataMap.get(key))!21}    [#-- 若dataMap.get(key)不存在,则取默认值21,注:因'!'是根据最后一个'.'截取识别的,所以前面要用()括起来 --]

i. JAVA代码示例

/**
 * 基础配置
 */
Configuration configuration = new Configuration(new Version("2.3.25-incubating"));	// 当前使用的freemarker版本
configuration.setDefaultEncoding("UTF-8");
configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(), "template");	// 指定ClassPath下的模板目录

/**
 * 模板渲染
 */
StringWriter stringWriter = new StringWriter();	// 指定回写的Writer
String tplName = "monthlyReport.ftl";	// 模板名
try {
	Template template = configuration.getTemplate(tplName);	// 指定模板
	template.process(monthlyVo, stringWriter);	// 执行渲染
} catch (TemplateNotFoundException e) {
	throw new OpsServiceException(ErrorCode.SERVER_ERROR, tplName + " does not exist", e);
} catch (MalformedTemplateNameException e) {
	throw new OpsServiceException(ErrorCode.SERVER_ERROR, "malformed template name", e);
} catch (ParseException e) {
	throw new OpsServiceException(ErrorCode.SERVER_ERROR, "template parse error", e);
} catch (TemplateException e) {
	throw new OpsServiceException(ErrorCode.SERVER_ERROR, "template render error", e);
} catch (IOException e) {
	throw new OpsServiceException(ErrorCode.SERVER_ERROR, "something wrong", e);
}

System.out.println(stringWriter.toString());

ii. 官网文档

转载于:https://my.oschina.net/u/812874/blog/828107

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值