2012-02-28 5 views
0

Я пытаюсь передать Freemarker HashLiteral на мой пользовательский метод следующим образом:метод Freemarker не может принимать объект в качестве параметров

<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

Как выглядит определение метода 'href'? – ddekany

+0

Я добавил метод href к вопросу. –

ответ

3

Возможно, это href является TemplateMethodModel вместо TemplateMethodModelEx. Аргумент args в TemplateMethodModel.exec(args) является List из String -s, поэтому FreeMarker пытается преобразовать значение в строку, но он может делать это только со строками, датами или числами. Поэтому просто измените его на TemplateMethodModelEx, а затем args будет List из TemplateModel -s и, следовательно, принимает все значения.

+0

Спасибо, блестящий! –

Смежные вопросы