| 

.NET C# Java Javascript Exception

Rückgabetyp von beforeUpdate-Closure kann Update verhindern

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Rückgabetyp von beforeUpdate-Closure kann Update verhindern

christian - 25.04.2009 00:58
Wenn man in einer Domain-Klasse beforeUpdate verwendet, und diese Closure "false" zurück gibt, wird das Update nicht ausgeführt. Bei beforeInsert, tritt dieses Verhalten hingegen nicht auf. Besonders tückisch ist, dass bei Groovy der Rückgabewert implizit der Wert des letzten Ausdrucks ist - so ist dieser Fehler noch schwerer zu finden.

Mit folgendem Beispiel kann man das nachvollziehen:
class UpdateBlocker {
	String password
	def encode = {
	 return false // wenn auskommentiert funktioniert es
	}
	def beforeInsert = encode
	def beforeUpdate = encode
}

Wenn man sich dazu Controller und Views erzeugen lässt und in das password-Feld "test" schreibt, das Objekt danach bearbeitet und einen anderen Wert hineinschreibt, bleibt der Wert "test" bestehen und das Update wird nicht durchgeführt.

Die Erkenntnis, deren Erlangung mich einen Tag gekostet hat, wollte ich euch nicht vorenthalten. Vielleicht beißt sich noch mal jemand die Zähne daran aus.

Gruß
Christian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Rückgabetyp von beforeUpdate-Closure kann Update verhindern" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.