FreeMarker小记

原创
2017/01/19 23:08
阅读数 261

指令说明

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. 官网文档

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部