Freemarker方法不能接受对象作为参数

时间:2012-02-28 14:17:21

标签: java freemarker

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

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

其中没有引号的项是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("");
}

由于

1 个答案:

答案 0 :(得分:3)

href可能是TemplateMethodModel而不是TemplateMethodModelExargs中的TemplateMethodModel.exec(args)参数是List的{​​{1}} - s,因此FreeMarker会尝试将值转换为字符串,但它只能使用字符串,日期或数字值。因此,只需将其更改为String,然后TemplateMethodModelEx将为argsList,因此接受所有类型的值。