Was ist die Verbindung zwischen validate () und hasErrors ()?

8

Diese Frage ergibt sich aus dem Problem eine andere Frage hasErrors() function funktioniert nicht für nicht-persistente Domain-Klasse , auch nach all den Dingen, die ich nach die Anweisung , Teil 7.5.

Nach Victors Weg habe ich das Problem mit validate () behoben, aber ich verstehe nicht, warum es funktioniert. Die Grails-Dokumente scheinen nichts über Sie zu sagen, sollten Sie eine validate () aufrufen, bevor die Funktion hasErrors () funktioniert. Wie konnte das passieren?

    
Hoàng Long 28.12.2010, 08:04
quelle

1 Antwort

9

Es macht für mich Sinn, dass validate aufgerufen werden muss, bevor ein Objekt gefragt wird, ob es hasErrors (oder save für richtige Domänenobjekte, die validate unter den Covern aufrufen). Validieren heißt in diesem Zusammenhang "Prüfe, ob dieses Objekt gültig ist und ggf. Fehler anzeigen".

Alternativ kann die GORM Implementierung würde rufen müssen validate jedes Mal, jede Änderung an einem Objekt gemacht wird, die mir weniger erwünschtes Verhalten wäre, da es eine Menge Arbeit bedeuten könnten häufig und unnötig gemacht werden (einige dieser Einschränkungen könnte eine Menge Arbeit bedeuten).

Der Anfang von Abschnitt 7.2 sagt ziemlich klar "Um eine Domain-Klasse zu validieren, können Sie die validate-Methode für jede Instanz aufrufen". Es stellt auch fest, dass "innerhalb Grails gibt es im Wesentlichen 2 Phasen der Validierung, die erste Phase ist Datenbindung, die auftritt, wenn Sie Request-Parameter auf eine Instanz wie binden ... An dieser Stelle haben Sie möglicherweise bereits Fehler in der Eigenschaft Fehler aufgrund Typumwandlung (wie Strings Daten konvertieren). Sie diese überprüfen und den ursprünglichen Eingangswert unter Verwendung der Fehler-API erhalten. ... die zweite Phase der Validierung passiert, wenn Sie bestätigen rufen oder zu speichern. Dies ist, wenn Grails wird das gebundene validieren values ​​agains die von Ihnen definierten Einschränkungen. "

Die Dokumentation für hasErrors auch dies erwähnt. Sie können darauf zugreifen, indem Sie den Methodenaufruf im Navigationsrahmen auf der linken Seite finden, wenn Sie sich auf der Dokumentationsseite befinden. Ich würde immer empfehlen, sowohl auf diese als auch auf die beschreibenden Benutzerleitfäden zu schauen, da diese oft ein wenig detaillierter sind. Hier ist die Seite für validate -Methode zu.

Ich hatte nie Probleme, validate direkt aufzurufen - es ist mir sehr klar und ich kann den Punkt auswählen, an dem die ganze Arbeit erledigt ist und ich bin bereit für die Validierung. Ich kann nicht eine Option, um dieses Verhalten überall zu ändern, aber wenn Sie validate wollen automatisch oder unter bestimmten Bedingungen genannt werden, können Sie vielleicht einig Groovy Meta-Programmierung Magie von vielleicht das Hinzufügen invokeMethod der Klasse verwenden könnten und es haben Rufen Sie validate auf, bevor Sie bestimmte Anrufe weiterleiten. Hier finden Sie aktuelle hier und hier . (Ich bin mir nicht sicher, ob ich das trotzdem empfehlen würde! Und bedenken Sie, dass Ihre Klasse jetzt davon abhängig ist, dass sie innerhalb des GORM-Validierungs-Frameworks verwendet wird, da die validate -Methode sonst nicht existiert).

    
Martin Dow 28.12.2010, 09:02
quelle

Tags und Links