if, elseif, else 指令

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>
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号