2010-09-03 26 views
5

Jak znaleźć wszystkie kontrolery działające w aplikacji?Znajdowanie wszystkich kontrolerów w aplikacji

Próbuję utworzyć menu przy użyciu YUI, gdzie tylko zarejestrowane kontrolery będą miały wyświetlane menu. Klasa kontrolera utworzy statyczną listę z różnymi właściwościami wyszczególniającymi nazwę, akcję itp. (Podobnie jak wtyczka grails-nav).

Chcę utworzyć taglib, który może znaleźć wszystkie kontrolery, określić, które z nich mają tę statyczną listę, a następnie zajrzeć do każdej listy i zbudować menu.

Myślę, że mogę użyć ControllerGrailsClass.metaClass.hasProperty, aby określić, czy dany kontroler ma właściwość statyczną - ale jak znaleźć wszystkie klasy kontrolerów do przesłuchania?

Dzięki z góry

Odpowiedz

9

Można uzyskać listę z obiektu GrailsApplication. Przykład:

class TestController { 

    def grailsApplication // gets injected automatically 

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

Jeśli nie jesteś w sterowniku, można się trzymać z obiektu aplikacji Grails tak:

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

def grailsApplication = ApplicationHolder.application 
+0

Dzięki ataylor za szybką odpowiedź. Właśnie widziałem to w ostatecznym przewodniku (poprzez wyszukiwarkę google), wstrzykuje on klasę grailsApplication i dodaje wybór dynamicznych pobierających get * Klasy itp. Innym pytaniem, które warto zadać, jest to, jak znaleźć te informacje? Na przykład przeszukałem interfejs API grails, a klasa nie wspomniała o tych dynamicznych metodach. Zrobiłem różne wyszukiwania google i znowu nie znalazłem nic. Odwołanie do grails nie czyni żadnych odniesień do tych - dobrze, na pewno nie znalazłem. – Primus

+0

dzięki jeszcze raz ataylor, niektóre wskaźniki na dobrym źródłem tych informacji również byłyby mile widziane. Mam ostateczny przewodnik po grails, ale nigdy nie pamiętam oglądania tego rodzaju informacji. – Primus

+0

Metody getControllerClasses, getDomainClasses itd. Są dynamicznie rozdzielane w DefaultGrailsApplication.invokeMethod() i getProperty() w celu obsługi klas artefaktów dostarczanych przez wtyczki. Na przykład wtyczka Quartz dodaje artefakt zadania, więc getJobClasses zwróci wszystkie artefakty zadania, jeśli zainstalowana jest wtyczka Quartz. –

Powiązane problemy