Как косвенно ссылаться на переменную модели GSP Grails, например, через .get (...) - PullRequest
4 голосов
/ 28 сентября 2010

Я использую GSP для отправки электронных писем на основе плагина MailService.Закрытие sendMail проходит (среди прочего) body(view:..., model:myModel)

Я знаю, что могу получить доступ к каждому элементу карты myModel, используя ${itemName} в GSP.Однако, поскольку мне иногда хочется создать имя элемента динамически, например 'item'+i, мне нужен некоторый окружающий метод для доступа к переменной.

Я уже пробовал ${model.get('item'+i) и ${params.get('item'+i), но модель пустаа params это пустая карта.Я также пробовал pageScope, но хотя я могу получить доступ к элементу через ${pageScope.itemName, я не могу использовать ${pageScope.get('item'+i)}, потому что pageScope не является картой.

Вероятно, существует множество решений для решения этой проблемы;Я был бы рад о простом ;-).Одно из решений, которое я вижу, состоит в том, чтобы передать myModel в качестве единственного параметра и затем всегда использовать myModel.get(...), однако это означало бы, что мне пришлось изменить все мои существующие GSP, чтобы они всегда ссылались на myModel вместо прямого доступа к элементам (с фиксированными именами);так что если есть способ, при котором мне не нужно менять модель, передаваемую в GSP, это было бы моим любимым.

Если бы кто-то мог также сказать несколько слов о разнице модели и параметров в этом контексте, это было бы дополнительно полезно!

Ответы [ 3 ]

7 голосов
/ 28 сентября 2010

Я справился с этим сейчас, используя ${pageScope.getProperty(...)}.

3 голосов
/ 28 сентября 2010

Нет области или переменной «модели». Вместо этого объекты на карте модели устанавливаются как атрибуты запроса, чтобы сделать их доступными для GSP. Это функция Spring, которая облегчает доступ к переменным в JSP с помощью JSTL, и поскольку синтаксис GSP очень похож на JSTL, он работает аналогично в Grails.

Так что вы можете использовать это:

${request.getAttribute('item'+i)}

для доступа к переменным модели с использованием динамических имен.

0 голосов
/ 14 февраля 2015

Вы можете использовать ${fieldValue(bean: book, field: 'title')}

См .: http://grails.github.io/grails-doc/latest/ref/Tags/fieldValue.html

...