2010-09-03 11 views
5

Come si trovano tutti i controller in esecuzione in un'applicazione?Ricerca di tutti i controller nell'applicazione

Sto tentando di creare un menu utilizzando YUI in cui solo i controller registrati visualizzeranno un menu. Una classe controller creerà un elenco statico con varie proprietà che descrivono nome, azione, ecc. (Molto simile al plugin grails-nav).

Voglio creare un taglib in grado di trovare tutti i controller, identificare quelli che hanno questa lista statica, guardare in ogni lista e creare un menu.

Penso di poter usare ControllerGrailsClass.metaClass.hasProperty per identificare se un determinato controller ha la proprietà statica - ma come faccio a trovare tutte le classi di controller da interrogare?

Grazie in anticipo

risposta

9

È possibile ottenere un elenco dall'oggetto GrailsApplication. Esempio:

class TestController { 

    def grailsApplication // gets injected automatically 

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

Se non sei in un controllore, è possibile ottenere una sospensione dell'oggetto applicazione graal in questo modo:

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

def grailsApplication = ApplicationHolder.application 
+0

Grazie ataylor per la pronta risposta. Ho appena visto questo nella guida definitiva (tramite ricerca google), inietta la classe grailsApplication e aggiunge una selezione di getter dinamici get * Classes ecc. L'altra domanda che merita è come trovi queste informazioni? Ad esempio ho cercato l'API Grails e la classe non ha menzionato questi metodi dinamici. Ho fatto varie ricerche su google e di nuovo non ho trovato nulla. Il riferimento ai graal non fa alcun riferimento a questi - beh, certamente non li ho trovati. – Primus

+0

grazie ancora ataylor, sarebbero state apprezzate anche alcune indicazioni su una buona fonte per queste informazioni. Ho la guida definitiva ai grails ma non ricordo mai di aver visto questo tipo di informazioni. – Primus

+0

I metodi getControllerClasses, getDomainClasses e così via vengono risolti in modo dinamico in DefaultGrailsApplication.invokeMethod() e getProperty() per supportare le classi di risorse artefatto fornite da plugin. Ad esempio, il plug-in Quartz aggiunge un artefatto di lavoro, quindi getJobClasses restituirà tutte le risorse utente di lavoro se è installato il plug-in Quartz. –

Problemi correlati