Как вызвать пользовательскую функцию в g: if test = "...", не предоставляя ее (или экземпляр объекта) модели? - PullRequest
2 голосов
/ 10 июня 2011

Фон :

  1. У меня есть макет страницы main.gsp
  2. Мне нужно условно показать или скрыть пункт меню
  3. Оценка состояния выполняется путем запроса базы данных
  4. Я не хочу увеличивать каждый контроллер, чтобы он оценивал это состояние и выводил результат на модель

Проблема : Я пытаюсь сделать что-то подобное

<g:if test="${checkCondition()}"> some html here </g:if>

Но нельзя сказать, что checkCondition в undefined.

Но это прекрасно работает:

<mytaglib:checkCondition />

Вопрос : Что я должен сделать, чтобы иметь возможность вызывать мою функцию в

<g:if test="${ expression }">

Ответы [ 2 ]

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

Поскольку у вас есть тег в пространстве имен ('mytaglib'), вы должны вызывать его как метод с этим пространством имен:

<g:if test="${mytaglib.checkCondition()}"> some html here </g:if>
1 голос
/ 10 июня 2011

переместите checkCondition () как статический метод в класс и импортируйте этот класс в ваш gsp.вы также можете определить класс обслуживания с помощью этого метода и напрямую вызывать этот метод serivce из вашего gsp. ясное решение состоит в том, чтобы определить, как вы описали, свой собственный taglib.внутри вашей библиотеки тегов вы можете внедрять служебные бины с помощью вспомогательных методов и т. д.

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