我正在尝试将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("");
}
由于
答案 0 :(得分:3)
href
可能是TemplateMethodModel
而不是TemplateMethodModelEx
。 args
中的TemplateMethodModel.exec(args)
参数是List
的{{1}} - s,因此FreeMarker会尝试将值转换为字符串,但它只能使用字符串,日期或数字值。因此,只需将其更改为String
,然后TemplateMethodModelEx
将为args
个List
,因此接受所有类型的值。