Freemarker - 带有点的变量名

16

在Freemarker模板中,是否有可能引用包含点(或'-')字符的变量?

例如:

Main.java:

public class Main {
    public static void main(String[] args) throws IOException, TemplateException {
        Configuration freemarkerConfig = new Configuration();
        freemarkerConfig.setClassForTemplateLoading(Main.class, "");
        Template template = freemarkerConfig.getTemplate("template.ftl");

        Map<String, String> data = new HashMap<String, String>();
        data.put("variable.name", "value");

        Writer out = new StringWriter();
        template.process(data, out);
        System.out.println(out.toString());
    }
}

模板.ftl:

${variable.name}

这段代码会抛出异常:

The following has evaluated to null or missing:
==> variable  [in template "template.ftl" at line 1, column 3]

在模板文件中是否可以引用变量"variable.name"?

2个回答

23

使用这种语法是可行的:

${.data_model["variable.name"]}

.data_model是一个特殊的变量,您可以使用它直接访问数据模型。


这对于非嵌套变量来说很好用,我能够转义句点(dot)。我们如何使其在嵌套场景下工作,其中一个句点用于描述层次结构,而另一个句点则在我们希望转义的名称中。${person.a.g.e}?第一个句点需要被考虑,而最后两个需要被转义。 - Amandeep Chugh

0

这是不可能的,因为Freemarker会将“name”视为“variable”的属性。因此,它首先寻找名为“variable”的对象,但实际上该对象名为“variable.name”,因此无法找到。


不,它不能。@obourgain的答案适用于非嵌套变量。 - Amandeep Chugh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接