2010-09-03 24 views
5

¿Cómo encuentro todos los controladores que se ejecutan en una aplicación?Encontrar todos los controladores en la aplicación

estoy tratando de crear un menú usando YUI donde los controladores registrados solamente tendrán un menú que se muestra. Una clase de controlador creará una lista estática con varias propiedades que detallan el nombre, la acción, etc. (al igual que el complemento grails-nav).

Quiero crear una taglib que se pueden encontrar todos los controladores, identificar cuáles tienen esta lista estática continuación, busque en cada lista y construir un menú.

Creo que puedo usar ControllerGrailsClass.metaClass.hasProperty para identificar si un controlador dado tiene la propiedad estática, pero ¿cómo puedo encontrar todas las clases de Controller para interrogar?

Gracias de antemano

Respuesta

9

Usted puede obtener una lista del objeto GrailsApplication. Ejemplo:

class TestController { 

    def grailsApplication // gets injected automatically 

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

Si no estás en un controlador, puede obtener una bodega del objeto de aplicación griales de este modo:

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

def grailsApplication = ApplicationHolder.application 
+0

Gracias ataylor por su pronta respuesta. Acabo de ver esto en el libro guía definitiva (a través de Google Search), que inyecta la clase grailsApplication y añade una selección de captadores dinámicos llegar Clases * etc. La otra pregunta vale la pena preguntar es ¿cómo encontrar esta información? Por ejemplo, busqué en la API de Grails y la clase no mencionó estos métodos dinámicos. Hice varias búsquedas en Google y nuevamente no encontré nada. La referencia de Grails no hace ninguna referencia a estos - bueno, ciertamente no he encontrado. – Primus

+0

gracias de nuevo ataylor, algunos consejos sobre una buena fuente para esta información también serían apreciados. Tengo la guía definitiva para Grails, pero nunca recuerdo haber visto este tipo de información. – Primus

+0

Los métodos getControllerClasses, getDomainClasses, etc. se resuelven dinámicamente en DefaultGrailsApplication.invokeMethod() y getProperty() para admitir las clases de artefactos proporcionados por el complemento. Por ejemplo, el complemento de Quartz agrega un artefacto de trabajo, por lo que getJobClasses devolverá todos los artefactos de trabajo si está instalado el complemento de Quartz. –

Cuestiones relacionadas