Grails: Checkbox wird nicht auf false zurückgesetzt

8

Ich entwickle eine Grails-App (1.0.4), in der ich eine Sammlung von Sammlungen auf einer einzelnen Seite in einer Rasteransicht bearbeiten möchte. Ich habe es ziemlich gut funktionieren nur abhängig von der indizierten Parameter Handhabung von Spring MVC, mit einer Ausnahme:

boolesche (oder auch boolesche) Werte im Grid können über Checkbox gesetzt werden, aber nicht unset, dh wenn ich das checkbox und update ankreuze, wird der Wert auf true gesetzt, aber danach, wenn ich nochmal bearbeite, Deaktivieren Sie das Kontrollkästchen und aktualisieren, es bleibt wahr.

Dies ist der GSP-Code des Kontrollkästchens:

%Vor%

Und das ist der HTML-Code, der generiert wird:

%Vor%

Ich habe einen Grails-Fehler gefunden, der genau diesen Effekt beschreibt, aber in 1.0 als behoben markiert ist. 2, und der dort beschriebene Problemmechanismus (Unterstrich in versteckten Feldnamen wird an die falsche Stelle gesetzt) ​​ist in meinem Fall nicht vorhanden.

Irgendwelche Ideen, was könnte der Grund sein?

    
Michael Borgwardt 22.02.2009, 06:41
quelle

5 Antworten

3

Dies ist die Lösung, die ein Typ namens Julius Huang auf der Grails-User-Mailingliste vorgeschlagen hat. Es ist wiederverwendbar, benötigt aber JavaScript, um ein verstecktes Feld mit der "false" -Antwort für ein nicht abgehaktes Kontrollkästchen zu füllen, das HTML leider nicht sendet.

  

Ich hack GSP, um "falsch" zu senden, wenn   Deaktivieren Sie das Kontrollkästchen (Wahr - & gt; Falsch) mit   benutzerdefinierte TagLib.

     

Standardmäßig checkBox sendet nichts wenn   deaktivieren, also verwende ich die CheckBox als   Event-Handler aber senden verstecktes Feld   stattdessen.

     

"params" in Controller kann umgehen   "falsch" - & gt; "wahr" ohne irgendwelche   Änderung. z.B. Alles bleibt   Gleiches in Controller.

Die benutzerdefinierte Tag-Verwendung in GSP (Beispiel usedfunc_F ist "true"),

%Vor%

Hier ist was der Tag generiert,

%Vor%

Das Javascript

%Vor%     
Michael Borgwardt 01.03.2009 13:13
quelle
2

Dies ist meine eigene Lösung, im Grunde eine Problemumgehung, die manuell das tut, was die Grails-Datenbindung tun sollte (aber nicht tut):

%Vor%

funktioniert, erfordert keine Änderung in Grails selbst, ist aber nicht wiederverwendbar (wahrscheinlich könnte so mit etwas mehr Arbeit gemacht werden).

    
Michael Borgwardt 01.03.2009 13:08
quelle
1

Ich denke, dass die einfachste Problemumgehung wäre, einen Debugger anzuhängen und zu sehen, warum Grails den Wert nicht füllen kann. Wenn man bedenkt, dass Grails Open Source ist, können Sie auf den Quellcode zugreifen und sobald Sie die Lösung dafür gefunden haben, können Sie Ihre Version patchen.

Ich habe auch diesen anderen Bug GRAILS-2861 gefunden, in dem das Problem der Bindung an Boolesche Elemente erwähnt wird (siehe Marc Kommentar im Thread). Ich denke, das ist genau das Problem, das du beschreibst.

    
alexpopescu 26.02.2009 00:26
quelle
1

Ich würde eine kleine Beispiel-App erstellen, die das Problem demonstriert und es an den Grails-Fehler anfügt (oder einen neuen erstellt). Hier könnte jemand in der Lage sein, Ihre Beispiel-App zu debuggen, oder Sie haben gezeigt, dass der Fehler nicht wirklich behoben wurde.

    
Ben Williams 25.02.2009 12:03
quelle
0

Probieren Sie es aus, setzen Sie die Logs auf DEBUG, versuchen Sie zuerst die ersten 3, wenn sie das Problem nicht zeigen, und drehen Sie alle auf DEBUG:

%Vor%

Dies sollte Ihnen erlauben, genau zu sehen, wann und wie die Parametereinstellung fehlschlägt und wahrscheinlich eine Umgehung herausfinden.

    
Kuukage 28.02.2009 02:53
quelle

Tags und Links