2 Stimmen

Grails Domain eigene Fehlermeldungen

Ich arbeite in einer Grails-Anwendung, ich habe viele Domains in den Anwendungen, mehr als 50! Die Fehlermeldung generiert sind Standard, ich habe die folgenden in meiner message.properties-Datei

default.blank.message=Field "{0}" cannot be blank.

Ein Beispiel für eine meiner Domänenklassen ist wie folgt:

class Person {

    String firstName;
    String lastName;
    String middleName;
    Date dob;
    String gender;
    String religion;
    String nationality;
    String maritalStatus;

    Zone permAddZone;
    District permAddDistrict;
    String permAddVDC;
}

Wenn ich also ein Feld, z. B. "maritalStatus", nicht ausführe, erscheint die folgende Fehlermeldung: "Field "maritialStatus" cannot be blank". Außerdem habe ich meiner Datei message.properties Folgendes hinzugefügt

person.maritialStatus=Maritial Status

Aber ich erhalte immer noch die Meldung "Feld "maritialStatus" kann nicht leer sein". Ich habe auch versucht, das I18n Templates Plugin zu verwenden, aber da ich viele Domänenklassen habe, wäre es zeitaufwändig, die Fehlermeldung für alle zu ändern. Also, welche Möglichkeiten habe ich oder was mache ich falsch. Für jede Hilfe bin ich dankbar.

3voto

Ian Roberts Punkte 117705

Der entsprechende Meldungsschlüssel, der überschrieben werden soll, ist auf der Referenzseite für jeden Constraint-Typ angegeben. Im Fall von leer Es ist

com.example.Person.maritalStatus.blank=Marital status must not be blank

Dies ist jedoch sehr zeitaufwendig und wiederholend, wenn Sie viele Domänen und viele Immobilien haben.

Wonach Sie fragen, ist stattdessen eine Möglichkeit, die Eigenschaftsnamen der Domänenklassen auf irgendeine Weise zu verarbeiten, bevor sie in die Standard Nachrichten. Dies ist nicht etwas, Grails unterstützt out of the box, aber ich mag eine Herausforderung ... und ich habe eine überraschend elegante Möglichkeit, es zu implementieren gefunden. Mein Ansatz ist das Grails-Plugin verfügbar unter https://github.com/ianroberts/recursive-messages und funktioniert, indem die Syntax für Formatstrings erweitert wird, um Platzhalter der folgenden Form zu unterstützen

default.blank.message=Field "{0,message,field.name.}" cannot be blank.

Ein Platzhalter {N,message,prefix} wird aufgelöst, indem das angegebene Präfix dem üblichen Platzhalter-Ersatzwert vorangestellt wird und die resultierende Zeichenkette ( field.name.maritalStatus in diesem Beispiel) als Schlüssel für eine Nachricht ohne Argument, die dann auf die übliche Weise nachgeschlagen wird. Auf diese Weise könnten Sie verschiedene Darstellungen für verschiedene Sprachen haben.

Es muss ein Plugin sein, weil es sich auf einen Trick stützt, der in einem Plugin doWithSpring funktioniert aber nicht in einer Anwendung, die resources.groovy , um die Definition der Standardeinstellungen zu ändern messageSource Frühlingsbohne.

Haftungsausschluss: Dies war eine schnelle Lösung, sie wurde nicht vollständig getestet und könnte wahrscheinlich noch effizienter umgesetzt werden.

1voto

Chris Punkte 7837

Um die Feldbezeichnung zu überschreiben, müssen Sie den Schlüssel überschreiben:

<package>.<domainclass>.<fieldname>.label

In Ihrem Fall sollten Sie es also versuchen:

<package>.Person.martialStatus.label=Label

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X