Freemarker 函数在哪里设置?

Where are Freemarker Functions set?

之前没有用过Freemarker,继承了一些编译不过的模板。我已将导致问题的范围缩小为:

${text('Text and {0}', 'More Text')}

这个text()函数是从哪里来的?我知道它试图将第二个字符串 return 注入到第一个字符串中,例如:"Text and More Text"。

这里是错误:

FreeMarker template error:
For "...(...)" callee: Expected a method, but this has evaluated to an extended_hash (wrapper: f.t.SimpleHash):

modernizr-2.6.2.js 是唯一 javascript 导入的。

任何想法为什么这条线会导致问题以及应该在哪里声明这个函数?

它可以来自几个地方:

  • 来自数据模型(您传递给 Template.process 的参数之一)

  • 来自共享变量,添加到 Configuration 单例。

  • 来自 #include-d 模板(或来自您所在的模板),通过 #function text#assign text = ...(或 #global text = ...

  • 来自 #import 编辑的模板 #global text = ...(极不可能...)

但是一个可能有趣的事情是错误说 text 确实存在,但它是一个散列(类似于 Map 的东西),而不是可调用的东西。也许也被称为 text 的东西掩盖了好的 text${.data_model.text('Text and {0}', 'More Text')} 说什么?

您提到了一个 JavaScript 文件。 FreeMarker 与 JavaScript 无关(它在服务器上运行,在 JVM 内部)。