Grails вызывает метод Controller из View - PullRequest
1 голос
/ 14 июня 2011

У меня быстрый вопрос к Граалю.У меня есть страница просмотра, которая перебирает массив объектов для их отображения.Код тега HTML / Grails выглядит следующим образом:

<g:each in="${ICFList}" status="i" var="icf">
<tr>
    <td>${icf.printName?.encodeAsHTML()}</td>
    <td>${icf.activeNote?.encodeAsHTML()}</td>
</tr>
</g:each>

Этот код работает и отображает то, что мне нужно.Однако я больше не хочу хранить переменную printName внутри моего объекта icf.объект также содержит односимвольный код для его идентификации, и у меня есть метод, который ищет значение printName на основе кода.По сути, мой вопрос таков:

Есть ли способ сделать что-то подобное

<td>${icf.getNameFromCode(${icf.code})}</td>

без необходимости хранить имя где-либо?Метод getNameFromCode определен в объекте контроллера для этого конкретного представления, но я не могу понять, как получить к нему доступ из gsp.Любая помощь с благодарностью.

Ответы [ 3 ]

6 голосов
/ 15 июня 2011

Формально отвечая на вопрос, вы можете использовать g: include :

<g:include controller="book" action="list" />

, хотя поля одной сущности гораздо больше похожи на модель .

4 голосов
/ 14 июня 2011

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

Я бы предложил либо переместить getNameFromCode в класс домена, либо реализовать логику в taglib и использовать пользовательский тег для отображения ваших данных.Какой вариант выбрать, зависит от того, относится ли этот метод к чему-то, что присуще модели, или к чему-то, что привязано к представлению.

Последний Начало работы с экранной передачей Grails объясняет, как создавать и использоватьпользовательские теги.

1 голос
/ 14 июня 2011

Этого также можно добиться, совершая вызовы AJAX на этот контроллер, но я думаю, что ответ Густаво - это то, что вы ищете.

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