Grails: wie die Rückkehr der Fehlermeldung von der controller-Logik (also nicht Ursprung von der domain-Eigenschaft Validierung)?

Fehler z.B. mit schlechten user-Eingabe kann nicht immer vernünftig geprüft mit domain-oder command-Objekt-Validierung.

E. g. beim erstellen eines "Passwort vergessen" - Funktionalität, ich möchte, um eine angemessene Nachricht, wenn der Benutzer einen Benutzernamen ein, die nicht in der Datenbank vorhanden. Also die controller-Aktion, soetwas macht

...
def user = User.find{name==uname}
if(!user) {
    //user not found in db, output error and render view again
    render view: 'forgotPassword'
    return
}
//do reset password stuff
...

Was soll ich tun, um den Fehler anzuzeigen, die in der Ansicht innerhalb der <g:hasErros> tag?

flash.message (wie die generierte Controller/Ansichten tun es) scheint nicht Recht zu mir, denn ich bin nicht die bloße Anzeige einer info-Meldung, sondern eine Fehlermeldung. Das ist, warum ich denke, die Nachricht sollte behandelt werden, indem die <g:hasErros> tag und angezeigt, wie ein domain-validation-Fehler. (Der Benutzer, es ist das gleiche feedback-Ebene: "nicht die Arbeit aufgrund der schlechten input".

Erstellen einer @Validateable command-Objekt scheint nicht richtig zu sein, auch. IMHO, überprüfen den Wert anhand der Datenbank ist nicht eigentlich die Verantwortung der Validierung innerhalb eines command-Objekt? Oder ist es? Dann scheint es ein wenig zu Komplex für mich.

Also, was ist der beste Weg zu gehen? Andere frameworks (z.B. Wicket) bieten verschiedene Methoden wie error(String msg) und info(String msg) die eine einfache Handhabung von feedback-Meldungen in der Ansicht. Gibt es ein ähnliches Konzept in Grails, die ich nur noch nicht gefunden?

  • Für diejenigen, die interessiert sind, in die endgültige Lösung, die ich gebaut habe, nach der Eingabe von Burt beckwith und Ian Robers: ich bin leider nicht veröffentlichen darf den Quellcode, aber im Allgemeinen habe ich einfach erstellt eine TagLib mit zwei Mitgliedern: #1 schreiben Sie eine Nachricht hinzufügen, um den flash-Bereich, z.B. myproject.message(error:'User does not exist') oder myproject.message(success:'Password changed')
  • Alle msg-Befehle Hinzugefügt werden, zwei der vier Listen in flash entsprechend Ihrer Art (Fehler/Erfolg/Warnung/info). Mitglied #2 ist der eigentliche tag zum anzeigen von Nachrichten, rendering alle msg-Befehle in die Seite. Es ruft auch flash.Nachricht und bean-Fehler. Hoffe, das hilft
InformationsquelleAutor peterp | 2012-09-03
Schreibe einen Kommentar