Знаток или Муравей? очень похожий вопрос этому, который должен помочь Вам ответить на свои вопросы.
, Кто такой Знаток? на официальном сайте.
редактирование: Для нового / проекта нового строительства, я рекомендовал бы использовать Знатока: "конвенция по конфигурации" сохранит Вас достойный блок времени в письменной форме и настраивающий сценарии развертывания и сборка. При использовании муравья сценарий сборки имеет тенденцию расти со временем в длине и сложности. Для существующих проектов это может быть твердо к рожку для обуви их конфигурация/расположение в систему Знатока.
Services are not intended to be used inside views. You could create a TagLib where you can get a reference to the service via dependency injection.
Что ж, я нашел обходной путь со следующим кодом:
def helpersService = grailsApplication.classLoader.loadClass('HelpersService').newInstance()
Однако лучше использовать Service через внедрение зависимостей, поэтому я попробую совет Зигфрида.
Более простой метод, предполагающий, что ваше представление визуализируется Контроллер - просто передать ссылку на службу из действия в представление в модели, то есть:
class someController {
def someService
def someAction = {
render(view: 'someView', model: ['someService': someService])
}
}
Затем его можно использовать, как и следовало ожидать, в представлении. Очевидно, что для шаблона, отображаемого представлением, вам также необходимо передать ссылку на шаблон. Но для ясности: С. Пухбауэр прав; сервисы не должны использоваться в представлениях, и вы можете столкнуться с трудностями при диагностике проблем,
I found out, that this groovy inline code works:
<% def xxxService = application.getAttribute("org.codehaus.groovy.grails.APPLICATION_CONTEXT").getBean("xxxService") %>
You can call functions of the service just like this:
<g:select optionKey="key" from="${xxxService.getWhateverList()}" name="tarif" value="${accountInstance?.tarif}" ></g:select>