7

是否可以在 ftl 中定义自定义内置插件(名称不再合适)?
由于语义前提,我不想使其成为功能,而是内置。

4

2 回答 2

5

这是不可能的,?语法是为内置函数保留的。(顺便说一句,这意味着将来会发生变化。可悲的是,在遥远的将来,从之前积压的规模和消除的速度来看......)

于 2013-11-09T15:14:40.530 回答
1

为了完整起见,这是Daniel (@ddekany) 的旧回复。我认为自 2010 年和 2013 年以来,该领域没有太大变化 :)


不,?something语法是为核心函数保留的,以避免在添加新的核心函数时出现名称冲突。但是,您可以这样做 ${translate_into_swahili(mytext)}。为此,根据您的应用程序,执行以下操作之一:

  • 创建一个定义您的函数的模板,然后将其包含 #include#import您的普通模板中。请注意,函数可以在纯 FreeMarker 中实现,也可以#function在 Java 中作为TemplateMethodModelEx-s 实现,然后在您将使用的位置

    <#function foo>...</#function> use 
    <#assign foo=your.class.Name"?new()> instead. 
    
  • 在 Java 中实现函数 as TemplateMethodModelEx,并将其放入数据模型中

  • 在 Java 中将函数实现为TemplateMethodModelEx,然后在初始化的地方使其FreeMarker可用 Configuration.setSharedVariable(name, method)

于 2017-09-26T00:48:50.740 回答