Метод Freemarker не может принимать объект в качестве параметров - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь передать 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 Ответ

3 голосов
/ 29 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...