uaeh - instalar grails en ubuntu
¿Puede un controlador de grails extenderse desde una clase base? ¿Cómo hacerlo para que los griales no exploten? (3)
Escribí una clase base para ayudar a construir mis controladores más rápidamente y eliminar la duplicación. Proporciona algunos métodos de ayuda, acciones predeterminadas y algunos metaprogramación para facilitar la construcción de estos elementos.
Uno de esos métodos en la clase base es así:
def dynamicList(Class clazz) {
def model = new LinkedHashMap()
model[getMapString(clazz) + "s"] = list(clazz)
model[getMapString(clazz) + "sTotal"] = count(clazz)
model
}
La acción que lo llama, también en la clase base, es esta:
def list = {
dynamicList(clazz)
}
Desafortunadamente, cuando voy a la acción de la lista en la subclase del controlador que hereda la clase base cuando se implementa mi aplicación, obtengo esta excepción:
groovy.lang.MissingMethodException: No signature of method: groovy.lang.MissingMethodException.dynamicList() is applicable for argument types: (java.lang.Class) values: [class project
.user.User]
at project.user.UserController$_closure1.doCall(UserController.groovy:18)
at project.user.UserController$_closure1.doCall(UserController.groovy)
at java.lang.Thread.run(Thread.java:619)
¿Cómo puedo golpear a Grails en la cabeza y simplemente decirle que haga lo que quiero que haga? Las pruebas de mi unidad controladora funcionan muy bien, por lo que el tiempo de ejecución de Grails es totalmente erróneo: /
Conocido
¿Es eso todo el código? Es probable que tenga problemas con la llamada a list()
en dynamicList()
porque coincide con la acción. En otras palabras, list()
es una abreviatura de list.call()
, que invocará el cierre de la list
.
Ciertamente algo muy extraño está sucediendo porque la excepción dice que no puede encontrar el método dynamiclist()
en la clase MissingMethodException
.
¿Tienes un ejemplo reproducible?
¿Estás seguro de que tu herencia es adecuada y has ejecutado Grails clean, etc.? La situación que describiste debería funcionar bien.
Creo que los Controladores se inician a través del marco de inyección de Grails, por lo que puede que no sea la mejor forma de usar lógica de herencia extraña aquí.
Aunque puede usar la composición en lugar de extender una clase base. Existe una función que le permite inyectar servicios fácilmente en los controladores, de modo que puede agrupar por funcionalidad en Servicios. ingrese la descripción del enlace aquí
Esta es una vieja pregunta, puede encontrar la respuesta o la tecnología evolucionó un poco.
La inyección automática funciona para Servicios y controladores y bibliotecas de etiquetas.