2015-01-21 3 views
0

У меня макрос печатает строку в хеш-формате (ключ/значение), когда я использую это значение в весеннем макросе freemarker, выдает ошибку.Freemarker "string to hash conversion"?

Вот пример

<@getContent /> - prints this string {"yes":"yes","no":"no"} 

<#assign yesNoMap><@getContent /></#assign> 

<@spring.formRadioButtons "model.somename" yesNoMap /> 

В основном я использую пружинный макрос для создания радио-кнопки и эти метки и значения приходят динамически из макроса.

Весенний макрос бросает ошибку и не распознает переменную «yesNoMap» как хэш.

Может ли кто-нибудь помочь мне преобразовать эту строчку в макрос в хэш?

Благодаря

+0

ли вы попробовать с помощью 'eval'? – ratherblue

+0

Да, я использовал eval, freemarker throws error "Expression & expected ...." –

+0

Вот сообщение об ошибке excat: freemarker.core.ParseException: Encountered "&" –

ответ

0

Хотя это не ответ на вопрос, поставленный в заголовке, я думаю, что следующий будет решить актуальную проблему.

Вы можете вернуть свою обычную да-нет-карту в качестве хеша в первую очередь, избавив вас от преобразования его из строки в хеш путем определения функции вместо макроса. В то время как макросы обрабатывают только текстовый вывод (который затем записывается директивой <#assign>), функции могут возвращать типизированные значения, в вашем случае - хэш.

<#function getContent> 
    <#return { 
    "yes": "yes", 
    "no": "no" 
    }> 
</#function> 

Теперь эту функцию можно вызывать в любом выражении, например. присваиваемое переменной, как вы хотели:

<#assign yesNoMap = getContent()> 

<@spring.formRadioButtons "model.somename" getContent() /> 

или даже использовали непосредственно в вызове весеннем макроса:

<@spring.formRadioButtons "model.somename" getContent() />