【发布时间】: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