2010-12-21 9 views
2

Ich bin gerade auf ein ziemlich merkwürdiges Problem gestoßen, während ich meine Anwendungs-Webflows getestet habe.Problem mit Webflow (s) in Grails

Ich habe zwei separate Webflows, auf die zugegriffen wird, sobald sich ein Benutzer anmeldet, je nachdem, ob der Benutzer männlich oder weiblich ist, beginnen sie einen Prozess, der sie auf einem Webflow sendet. Eine für Männer, eine andere für Frauen.

Also um meine App zu testen, logge ich mich als männlicher Benutzer ein und gebe den Flow ein, das ist alles in Ordnung .. entweder durch Abmelden und Einloggen als Frau (oder Einloggen als weiblicher Benutzer in einem anderen Browser) ich versuche dann durch den weiblichen Prozess zu gehen, aber Bang erhalte ich eine Ausnahme:

Error 500: java.util.Collections$UnmodifiableMap cannot be cast to groovy.lang.Closure 
Servlet: grails 
URI: /ACUREG/grails/applicant/ma.dispatch 
Exception Message: java.util.Collections$UnmodifiableMap cannot be cast to groovy.lang.Closure 
Caused by: java.util.Collections$UnmodifiableMap cannot be cast to groovy.lang.Closure 
Class: ApplicantController 

Nun ist dies seltsam, wie auch das Gegenteil wahr ist, wenn ich zum ersten Mal durchlaufe als frau begann, dann versuchen, das versuchen, Männlicher Prozess, das gleiche Problem tritt auf, aber dieses Mal wird die Ausnahme auf das erste Ereignis im männlichen webflow-Code zeigen ...

Weiß jemand, warum dies ha sein kann schärfen? Ich dachte, dass es vielleicht etwas mit zwei Webflows im selben Controller zu tun hat, aber nachdem ich sie in ihre eigenen Controller getrennt habe und immer noch das gleiche Problem sehe, ist das eindeutig nicht der Fall.

Danke,

+0

Quelle würde helfen. Kann es sein, dass du [] anstelle von {} benutzt? –

+0

Die Sache ist, beide fließt funktioniert wie erwartet, wenn ich das Programm zwischen Versuchen neu starten. ZB Restart, Try Flow A .. alles OK, neu starten, versuchen Sie Flow B, alles OK .. aber wenn ich versuche, Flow A, abmelden und versuchen Sie Flow B, dann Crash, – Dave

+0

Hinzufügen von Debugging für Webflow und wir können den Punkt sehen es stürzt ab: registry.FlowDefinitionRegistryImpl erste FlowDefinition mit id ‚Anmelder/fa‘ builder.DefaultFlowHolder den Fluss zum ersten Mal Zusammenbauen errors.GrailsExceptionResolver java.util.Collections $ UnmodifiableMap kann nicht auf groovy.lang.Closure – Dave

Antwort

0

Das Problem war, nach unten Ereignissen Webflow über den gleichen Namen mehrere Webflows. Als ich die Ereignisse umbenannte, waren sie alle verschieden, keine Probleme mehr.

1

Gerade hier so viel eine Antwort zu geben, wie ich kann, verengt ich das Problem auf eine Methode, die ich in der Initialisierung Block nennen, wo ich eine Service-Methode aufrufen, die die Eigenschaften eines Befehlsobjekts aktualisiert mit den Werten aus übereinstimmenden Eigenschaftsnamen von einem Domänenobjekt.

Solange die Klassennamen der Befehlsobjekte unterschiedlich sind, gibt es kein Problem, aber in meinem Fall verwendet die erste Seite jedes meiner Webflows die gleiche Befehlsobjektklasse und aus irgendeinem Grund verursacht dies die Ausnahme . Durch das Duplizieren dieses bestimmten Befehlsobjekts und das Umbenennen eines bestimmten Befehlsobjekts, so dass es spezifisch für einen der Webflows war, verschwindet das Problem.

Ich wünschte, ich hätte eine nützlichere Ausnahme und einen Hinweis darauf, wo das Problem aufgetreten ist, und ich habe vielleicht einen Tag gespeichert, um es zu verfolgen.

Also kurz gesagt, wenn Sie mehrere webflows mit Befehlsobjekten verwenden, seien Sie vorsichtig, wie sie scheinen irgendwie mit Namen ‚zwischengespeichert‘ zu werden ...

+1

Das ist vielleicht zu spät für Sie, aber ich hoffe, dass dies jemand anderem hilft ... Wenn Sie daran denken, Webflow in Grails zu verwenden, tun Sie dies bitte nicht.Es ist sehr invasiv (beeinflusst die Art, wie Sie Ihre GSPs schreiben, beeinflusst die Art und Weise, wie DB-Transaktionen behandelt werden usw.), bietet aber wenig Nutzen. Es ist normalerweise nicht so schwer, das eigene zu rollen ... Das Groovy-DSL, das das Grails-Plugin bietet, ist nett, aber es hat kein Ende der Probleme für unser Team und jeden anderen, mit dem ich darüber gesprochen habe, verursacht ... –