Innerhalb meiner neuesten Grails 2.3.0 Projekt verwende ich die @Mixin
Annotation, um eine Hilfsklasse zu mischen, um meine controller
mehr trocken zu halten.Controller @Mixin funktioniert nur nach der Neukompilierung der App
Das Mixin funktioniert nur, wenn einige Änderungen im Controller vorgenommen wurden, um eine Neukompilierung des Controllers zu erzwingen. Nach dem ersten Kompilieren (grails run-app
) ist der Helfer nicht gemischt - ich bekomme einen MissingMethodException
Versuch, auf eine Methode aus der Helferklasse zuzugreifen.
Hier ist mein Helfer witin src/groovy
:
class ProjectHelper {
def withProject(id, Closure c) {
def project = Project.get(id)
if (project) {
c.call project
} else {
flash.message = 'Project not found!'
render view: 'myView'
return
}
}
}
und (einer) der controller
, welche die verwendet ProjectHelper
:
@Mixin(ProjectHelper)
class ProjectController {
def index() {
withProject params.projectId, {project ->
// do something with the project
}
}
}
Als ich das Projekt mit grails clean
und Starten der App cleane, ich den folgenden Fehler nach dem Zugriff auf project/index
erhalten:
MissingMethodException occurred when processing request:
[GET] /<myApp>/project/
No signature of method: <myPackage>.withProject() is applicable for argument types:
(java.lang.String, <myPackage>.ProjectController$_index_closure1_closure10) values:
[1, <myPackage>[email protected]]
Nach einigen Änderungen in ReportController
(z.B. Hinzufügen eines einzelnen Platzes) grails kompiliert 2 Quelldateien und die Methode withProject
könnte verwendet werden. Der Zugriff auf project/index
funktioniert wie erwartet.
Was läuft hier falsch? Ist es ein Fehler oder vermisse ich etwas?
aktualisieren
Es stellt sich heraus, dass ich völlig verpasst haben, dass die grails.util.Mixin
gibt mir eine weitere Ausnahme mit (MissingPropertyException
) durch Zugriff auf die Misch in Klasseneigenschaften (in meinem Fall: flash
) zu fehlen (siehe JIRA this issue) die mit groovy.lang.Mixin
arbeitet (nach der Neukompilierung).
Gibt es eine Möglichkeit, die groovy.lang.Mixin
zur Laufzeit manuell neu zu kompilieren/zu mischen/muss ich eine andere Fehlerbehandlung für den else
Teil finden, bis das Problem behoben ist?
Irgendwelche Vorschläge?
Welche @Mixin? 'groovy.lang.Mixin' oder' grails.util.Mixin'? Versuchen Sie den anderen zu benutzen, wenn es ein grooviger Mix ist. – dmahapatro
Ich habe beides versucht. Weder das eine noch das andere hat funktioniert. – aiolos
@dmahapatro Ich habe es nochmal überprüft! Gestern war es etwas spät - ich habe das grails.util vermisst.Mixin gibt eine weitere Ausnahme. Ich werde meine Frage aktualisieren ... – aiolos