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
<#else>
x is not 1
<#if y < 0>
and y is less than 0
</#if>
注意
:当你想测试是否 x > 0 或 x >= 0,编写 <#if x > 0> 和 <#if x >= 0> 是错误的, 因为第一个 > 会结束 #if 标签。要这么来做,可以编写 <#if x gt 0> 或 <#if gte 0>。也请注意,如果比较发生在括号内部,那么就没有这样的问题, 比如 <#if foo.bar(x > 0)> 就会得到想要的结果。
freemarker广告位
实例
:下面通过实例演示 if、elseif 指令的使用。
<html>
<title>if 指令</title>
</head>
性别:<#if sex="1">
<label>男</label>
<#elseif sex="2">
<label>女</label>
<#elseif sex="3">
<label>未知</label>
<#else>
<label>性别不能为空</label>
<#if (sex="1" || sex="2")>
<p>性别是有效的</p>
<#else>
<p>无效的性别</p>
<#if version??>
<p>版本信息:${version}</p>
</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>
<title>if 指令</title>
</head>
<label>男</label>
<p>性别是有效的</p>
<p>版本信息:v1.0.1</p>
</body>
</html>
上一章:特殊变量
下一章:switch, case, default, break指令