Methods

暴露给模板的方法变量实现TemplateMethodModel接口。它包含一种方法:TemplateModel exec(java.util.List arguments)。当您使用方法调用表达式调用方法时,将调用exec方法。 arguments 参数将包含 FTL 方法调用参数的值。 exec的返回值给出 FTL 方法调用表达式的值。

TemplateMethodModelEx接口扩展了TemplateMethodModel。它不添加任何新方法。对象实现此* marker *接口的事实向 FTL 引擎指示应将参数直接作为TemplateModel -s 放置到java.util.List中。否则,它们将以String -s 的形式放在列表中。

出于明显的原因,这些接口没有默认实现。

示例:此方法将返回第一个出现的第一个字符串的第二个字符串内的索引;如果第二个字符串不包含第一个字符串,则返回-1.

public class IndexOfMethod implements TemplateMethodModel {

    public TemplateModel exec(List args) throws TemplateModelException {
        if (args.size() != 2) {
            throw new TemplateModelException("Wrong arguments");
        }
        return new SimpleNumber(
            ((String) args.get(1)).indexOf((String) args.get(0)));
    }
}

如果您将其实例放入根目录:

root.put("indexOf", new IndexOfMethod());

那么您可以在模板中调用它:

<#assign x = "something">
${indexOf("met", x)}
${indexOf("foo", x)}

然后输出将是:

2
-1

如果您需要访问运行时 FTL 环境(读/写变量,获取当前语言环境等),则可以使用Environment.getCurrentEnvironment()进行获取。