指令说明
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());