【问题标题】:Freemarker method cannot accept object as parametersFreemarker 方法不能接受对象作为参数
【发布时间】:2012-03-18 00:28:53
【问题描述】:

我正在尝试将 Freemarker HashLiteral 传递给我的自定义方法,如下所示:

<a href="${href("Item", {"item": item})}">...</a>

其中不带引号的 item 是 ModelAndView 中给出的对象。 {"item": item} 已正确转换为 freemarker.core.HashLiteral$SequenceHash,但我无法在我的方法中恢复它,因为我得到以下异常:

Expecting a string, date or number here, 
   Expression {"item": item} is instead a freemarker.core.HashLiteral$SequenceHash

即使href 方法的主体为空,也会发生这种情况:

public TemplateModel exec(List args) throws TemplateModelException {
    return new SimpleScalar("");
}

谢谢

【问题讨论】:

  • href 方法的定义是怎样的?
  • 我已将 href 方法添加到问题中。

标签: java freemarker


【解决方案1】:

可能hrefTemplateMethodModel 而不是TemplateMethodModelExTemplateMethodModel.exec(args) 中的 args 参数是 String-s 的 List,因此 FreeMarker 尝试将值转换为字符串,但它只能对字符串、日期或数字值进行转换。所以只需将其更改为TemplateMethodModelEx,然后args 将成为ListTemplateModel-s 并因此接受所有类型的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    相关资源
    最近更新 更多