2016-05-24 15 views
0

Ich habe eine Klasse:Grails 3 - überprüfen, ob Befehl Objektwerte sind alle null

class PersonCommand implements Validateable { 
    String firstName 
    String lastName 

    static constraints = { 
     firstName nullable: true 
     lastName nullable: true 
    } 
} 

Ich habe eine Liste der Typ PersonCommand, die ich validieren müssen. Ich würde gerne jedes Element durchlaufen und prüfen, ob firstName und lastName null sind. Gibt es eine Möglichkeit, dies zu tun, ohne explizit nach diesen Eigenschaften zu suchen? Ich möchte wie etwas tun:

for(PersonCommand person in people) { 
    if(areAllMapValuesNull(person.properties)) { 
     person.validate() 
    } else { 
     ... 

aber person.properties hat andere Eigenschaften haben als nur Vorname und Nachname, da es Validateable ist. Ich suche nicht nach Hilfe für die Funktion areAllMapValuesNull(), sondern nur, um die Werte firstName und lastName zu erhalten, ohne die Prüfungen hart zu codieren.

+0

versuchen Sie 'person.properties.entrySet(). FindAll {it.key in [" firstName "," lastName "]}' anstelle von 'person.properties' –

+0

Das hat leider auch Eigenschaften wie class, errors, constraints, und EinschränkungenMap. – Anonymous1

+0

Nachdem Sie 'findAll {it.key in [" firstName "," lastName "]}' oder allgemein für alle persistenten Eigenschaften nur 'findAll {it.key in person.persistantProperties.name}' gefunden haben, wird dies nicht der Fall sein Klassen-, Fehlerbeschränkungen usw. -Eigenschaften enthalten. –

Antwort

1

Sie können diesen Code versuchen, ich habe nicht getestet, ist ein Entwurf zu Ihrer möglichen Lösung, richtig.

def p = new DefaultGrailsDomainClass(PersonCommand.class) 
    for(PersonCommand person in people) { 
    def prop = person.properties.entrySet().findAll{ it.key in p.persistantProperties } 
    if(areAllMapValuesNull(prop)) { 
     person.validate() 
    } else {} 

Prost.

+0

Ich bekomme eine Ausnahme: 'org.grails.core.exceptions.GrailsDomainException: Identity-Eigenschaft nicht gefunden, aber in Domain-Klasse erforderlich'. Meine IDE sagt mir auch, dass persistantProperties veraltet ist. – Anonymous1

+0

Was ist deine Grails-Version? Ist PersonCommand eine DomainClass? –

+0

Im Internet sägen ich auch Schnittstellen http://docs.grails.org/latest/api/org/codehau/groovy/grails/commons/GrailsDomainClass.html#getPersistentProperties() und http://docs.grails.org /latest/api/grails/core/GrailsDomainClass.html und es scheint mir, dass das einzige, was sich geändert hat, das Paket war. –

Verwandte Themen