if 指令用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。如果你使用的 if-elseif-else 语句,则根据给定的条件选择合适的分支命令进行执行。语法如下:
<#if condition> ... <#elseif condition2> ... <#elseif condition3> ... <#else> ... </#if>
上面的 condition、condition2、condition3 表达式将被计算成布尔值(true/false)。
其中,elseif 和 else 是可选的;也就是说我们可以只使用单独的 if 语句,如下:
<#if condition> ... </#if>
你可以使用 if, elseif 和 else 指令来条件判断是否越过模板的一个部分。 condition 必须计算成布尔值,否则错误将会中止模板处理。elseif 和 else 必须出现在 if 内部 (也就是,在 if 的开始标签和结束标签之间)。 if 中可以包含任意数量的 elseif (包括0个) 而且结束时 else 是可选的。比如:
只有 if 没有 elseif 和 else:
<#if x == 1> x is 1 </#if>
只有 if 没有 elseif 但是有 else:
<#if x == 1> x is 1 <#else> x is not 1 </#if>
有 if 和两个 elseif 但是没有 else:
<#if x == 1> x is 1 <#elseif x == 2> x is 2 <#elseif x == 3> x is 3 </#if>
有 if 和三个 elseif 还有 else:
<#if x == 1> x is 1 <#elseif x == 2> x is 2 <#elseif x == 3> x is 3 <#elseif x == 4> x is 4 <#else> x is not 1 nor 2 nor 3 nor 4 </#if>
你也可以嵌套 if 指令:
<#if x == 1> x is 1 <#if y == 1> and y is 1 too <#else> but y is not </#if> <#else> x is not 1 <#if y < 0> and y is less than 0 </#if> </#if>
注意:当你想测试是否 x > 0 或 x >= 0,编写 <#if x > 0> 和 <#if x >= 0> 是错误的, 因为第一个 > 会结束 #if 标签。要这么来做,可以编写 <#if x gt 0> 或 <#if gte 0>。也请注意,如果比较发生在括号内部,那么就没有这样的问题, 比如 <#if foo.bar(x > 0)> 就会得到想要的结果。
实例:下面通过实例演示 if、elseif 指令的使用。
<html> <head> <title>if 指令</title> </head> <body> <p> 性别:<#if sex="1"> <label>男</label> <#elseif sex="2"> <label>女</label> <#elseif sex="3"> <label>未知</label> <#else> <label>性别不能为空</label> </#if> </p> <#if (sex="1" || sex="2")> <p>性别是有效的</p> <#else> <p>无效的性别</p> </#if> <#if version??> <p>版本信息:${version}</p> </#if> </body> </html>
Java代码:
package com.hxstrive.freemarker.demo1; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateExceptionHandler; import java.io.File; import java.io.FileWriter; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.*; public class Demo6 { public static void main(String[] args) throws Exception { // 1. 配置 FreeMarker Configuration cfg = new Configuration(Configuration.VERSION_2_3_23); cfg.setClassForTemplateLoading(Demo6.class, "/templates/"); cfg.setDefaultEncoding("UTF-8"); cfg.setLocale(Locale.CHINESE); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); // 2. 准备模版数据 Map<String, Object> input = new HashMap<String, Object>(); input.put("sex", "1"); // 性别(1-男;2-女;3-未知) input.put("version", "v1.0.1"); Template template = cfg.getTemplate("template6.ftl"); Writer consoleWriter = new OutputStreamWriter(System.out); template.process(input, consoleWriter); // 将输出结果保存到文件中 Writer fileWriter = new FileWriter(new File("output.html")); try { template.process(input, fileWriter); } finally { fileWriter.close(); } } }
输出结果:
<html> <head> <title>if 指令</title> </head> <body> <p> 性别: <label>男</label> </p> <p>性别是有效的</p> <p>版本信息:v1.0.1</p> </body> </html>