2010-09-03 2 views
5

Как найти все контроллеры, запущенные в приложении?Поиск всех контроллеров в приложении

Я пытаюсь создать меню с использованием YUI, где будут отображаться только зарегистрированные контроллеры. Класс контроллера создаст статический список с различными свойствами, определяющими имя, действие и т. Д. (Так же, как плагин grails-nav).

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

Я думаю, я могу использовать ControllerGrailsClass.metaClass.hasProperty, чтобы определить, имеет ли данный контроллер статическое свойство - но как мне найти все классы контроллера для опроса?

Заранее спасибо

ответ

9

Вы можете получить список из объекта GrailsApplication. Пример:

class TestController { 

    def grailsApplication // gets injected automatically 

    def test = { 
     grailsApplication.controllerClasses.each { controllerArtefact -> 
      def controllerClass = controllerArtefact.getClazz() 
      println "$controllerArtefact, $controllerClass" 
     } 
    } 
} 

Если вы не в контроллере, вы можете ухватить объекта Grails приложения следующим образом:

import org.codehaus.groovy.grails.commons.ApplicationHolder 

def grailsApplication = ApplicationHolder.application 
+0

Спасибо ataylor за быстрый ответ. Я только что видел это в окончательной путеводителе (через google search), он вводит класс grailsApplication и добавляет выбор динамических getters get * Classes и т. Д. Другой вопрос, который стоит задать, - это как вы находите эту информацию? Например, я искал API grails, и класс не упоминал об этих динамических методах. Я сделал различные поисковые запросы Google и снова ничего не нашел. Ссылка grails не делает никаких ссылок на них - ну, я, конечно, не нашел. – Primus

+0

спасибо снова ataylor, некоторые указатели на хороший источник для этой информации также будут оценены. У меня есть окончательное руководство к grails, но can not когда-либо помнят такую ​​информацию. – Primus

+0

Методы getControllerClasses, getDomainClasses и т. Д. Динамически разрешены в DefaultGrailsApplication.invokeMethod() и getProperty() для поддержки классов артефактов, предоставляемых плагинами. Например, плагин Quartz добавляет артефакт Job, поэтому getJobClasses вернет все артефакты задания, если установлен плагин Quartz. –