Frage

Ich versuche zu verstehen, wie die von Grails 2.3.4 generierten Gerüstmethoden die Validierung durchführen.Folgendes wurde zum Beispiel für meine Club-Domain-Speichermethode generiert:

def save(Club clubInstance) {
    if (clubInstance == null) {
        notFound()
        return
    }

    if (clubInstance.hasErrors()) {
        respond clubInstance.errors, view:'create'
        return
    }

    clubInstance.save flush:true

    request.withFormat {
        form {
            flash.message = message(code: 'default.created.message', args: [message(code: 'clubInstance.label', default: 'Club'), clubInstance.id])
            redirect clubInstance
        }
        '*' { respond clubInstance, [status: CREATED] }
    }
}

Soweit ich weiß, erfolgte die erste Phase der Validierung bei der Datenbindung an den Club-Clubinstance-Parameter der Speicheraktion.Daher werden alle Datenbindungsfehler im if (clubInstance.hasErrors()) abgefangen.

Ich sehe keinen expliziten Aufruf von clubInstance.validate() oder eine Fehlerprüfung für clubInstance.save, wie in der Dokumentation angegeben.Es scheint jedoch zu funktionieren.Wie validiert diese Methode also die Ansicht und kehrt bei Verstößen gegen Einschränkungen zur Ansicht zurück?

Noch wichtiger: Sollten wir die generierten Scaffolding-Controller nicht als Best-Practice-Methode für grundlegendes CRUD in Grails verwenden?

War es hilfreich?

Lösung

Wenn Sie Parameter in Controller-Aktionsmethoden einschließen, übernimmt Grails die Datenbindung für sie.Für einfache Typen wie Strings, Zahlen, Boolean usw.Der Parametername wird mit den Parameternamen abgeglichen, und wenn es eine Übereinstimmung und eine sinnvolle Möglichkeit gibt, die Parameterzeichenfolge in den angeforderten Typ zu konvertieren, wird dies für Sie erledigt.

Bei komplexen Typen wird der Parameter als Befehlsobjekt behandelt.Wenn es in der Controller-Klasse definiert ist, wird es zur Kompilierzeit über eine AST-Transformation validierbar gemacht.Wenn die Klasse an anderer Stelle definiert ist (z. B.src/groovy) muss mit dem annotiert werden grails.validation.Validateable Annotation, und wenn es sich um eine Domänenklasse handelt, ist sie offensichtlich validierbar.In jedem Fall wird „validate()“ für Sie aufgerufen, nachdem die Instanz erstellt und an die Daten gebunden wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top