【问题标题】:Where are Freemarker Functions set?Freemarker 函数在哪里设置?
【发布时间】:2018-03-09 01:39:57
【问题描述】:

我之前没有使用过 Freemarker,并且继承了一些无法编译的模板。我已将导致问题的范围缩小到:

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

这个 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。

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

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    它可能来自几个地方:

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

    • 来自一个共享变量,它被添加到Configuration 单例中。

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

    • 来自#import-ed 模板,通过#global text = ...(极不可能...)

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

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

    【讨论】:

    • 您的回答引导我走向正确的方向。基本上我可以通过实现 TemplateMethodModelEx 来创建一个 text() 然后将该类放入数据模型(对我来说是一个哈希映射),这是你的第一个要点。参考:freemarker.org/docs/api/freemarker/template/…
    猜你喜欢
    • 2011-11-15
    • 2019-04-02
    • 2020-03-07
    • 2016-12-25
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多