【问题标题】:Freemarker call Java FilterFreemarker 调用 Java 过滤器
【发布时间】:2014-08-22 18:24:50
【问题描述】:

在我的 Java 代码中,我添加了一个 POJO

rootMap.put("_Field_",field);

有一个函数“getFilteredHtml”暂时只返回字符串 这是作为参数给出的(这个想法是稍后改变它 - 但出于测试目的,它保持 html 不变)。

/**
 * get filtered html for this field
 * @param html
 * @return
 */
public String getFilteredHtml(String html) {
    return html;
}

在 Freemarker 模板中,我正在使用这样的函数:

${_Field_.getFilteredHtml(fieldRef?eval!"-")}

这会产生以下错误消息:

Root Cause: freemarker.template.TemplateModelException: Argument type mismatch;
can not unwrap argument #1 (class: freemarker.ext.beans.NumberModel, toString: "4") 
to class java.lang.String

我试图理解http://freemarker.org/docs/pgui_misc_beanwrapper.html 想告诉我,但这对我来说都是希腊语。我怎样才能避免这种 Beanwrapper 行为并使 确定函数 getFilteredHtml 只是简单地调用了所有关于包装和展开的废话吗?

【问题讨论】:

  • 看起来像将 getFilteredHtml 修改为 public Object getFilteredHtml(Object html) 就可以了。该错误消息只是具有误导性,因为它在尝试说当输入为 long(或其他数字类型)时不需要字符串时谈论 freemarker.ext.beans.NumberModel
  • 如果您使用的是 FreeMarker 2.3.20(现在已经 1 岁),错误消息将是:“参数类型不匹配;无法转换(展开)参数 #1 类型编号的值+extended_hash(整数封装到 f.e.b.NumberModel)到字符串。”
  • @ddekany - 谢谢我升级了

标签: freemarker


【解决方案1】:

由于没有其他答案出现,我引用我的评论:

看起来将 getFilteredHtml 修改为 public Object getFilteredHtml(Object html) 就可以了。该错误消息只是具有误导性,因为它在尝试说当输入为 long(或其他一些数字类型)时不需要字符串时谈论 freemarker.ext.beans.NumberModel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2012-07-19
    • 2023-03-26
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多