美文网首页
freemarker 设置变量为空不报错

freemarker 设置变量为空不报错

作者: 饱饱想要的灵感 | 来源:发表于2023-05-04 11:18 被阅读0次

在Freemarker中,可以使用?default指令或者!来设置变量为空时的默认值,避免报错。

例如,假设有一个变量${name},如果该变量为空,则可以使用以下语法设置默认值:

${name?default("未知")}
${name!"未知"}

这将在${name}为空时输出“未知”,而不会报错。

也可以使用Freemarker的Configuration类的setClassicCompatible方法来实现,如果设置为true,则启用经典兼容模式,当变量为null或者变量不存在时都不会抛出异常。

经典兼容模式是指Freemarker 2.x版本中的一些行为,这些行为在Freemarker 2.x版本中是默认的,但在Freemarker 2.3.x版本中已经被修改了。
经典兼容模式的启用或禁用将影响Freemarker的一些行为,例如:

  • 在模板中使用未定义的变量时,是否抛出异常
  • 是否允许在模板中使用未定义的宏
  • 是否允许在模板中使用未定义的指令

因此,根据应用程序的需求,可以选择启用或禁用经典兼容模式。

示例代码如下:

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

public class FreemarkerNullValueExample {

    public static void main(String[] args) throws IOException, TemplateException {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
        cfg.setClassForTemplateLoading(FreemarkerNullValueExample.class, "/");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        cfg.setClassicCompatible(true); // 设置为兼容模式

        Map<String, Object> data = new HashMap<>();
        data.put("name", "John");
        data.put("age", null);

        Template template = cfg.getTemplate("example.ftl");
        Writer out = new OutputStreamWriter(System.out);
        template.process(data, out);
        out.flush();
    }
}

在上面的示例中,我们将Configuration的classicCompatible属性设置为true,这将使Freemarker在处理null值时不抛出异常。在模板中,您可以像往常一样使用变量,即使它们为null,甚至它们不存在都不会抛出异常。例如:

<!DOCTYPE html>
<html>
<head>
    <title>Welcome ${name}</title>
</head>
<body>
    <p>Age: ${age}</p>
    <p>Age: ${sex}</p>
</body>
</html>

在上面的模板中,我们使用name, age和sex变量,即使age为null,或者sex变量不存在都不会抛出异常。

相关文章

网友评论

      本文标题:freemarker 设置变量为空不报错

      本文链接:https://www.haomeiwen.com/subject/atjxsdtx.html