2016-05-24 31 views
0

我有一个类:Grails的3 - 检查是否命令对象的值均为空

class PersonCommand implements Validateable { 
    String firstName 
    String lastName 

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

我有型PersonCommand的名单,我需要验证。我想遍历每个元素并检查firstName和lastName是否都为null。有没有办法做到这一点,而没有明确检查这些属性?我想这样做:

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

但person.properties具有其他属性添加到它不仅仅是firstName和lastName,因为它是Validateable。我没有在areAllMapValuesNull()函数上寻找帮助,只是在没有硬编码检查的情况下获取值firstName和lastName。

+0

尝试'person.properties.entrySet()。findAll {it.key in [“firstName”,“lastName”]}'而不是'person.properties' –

+0

不幸的是,它也有像class,errors,constraints,和constraintsMap。 – Anonymous1

+0

当你在[“firstName”,“lastName”]}中做findAll {it.key之后'或者只对所有持久性属性使用'findAll {it.key in person.persistantProperties.name}'时,它不会包含类,错误约束等属性.. –

回答

1

你可以试试这个代码,我没有测试,是一个草案,以你的可能的解决方案,对。

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 {} 

干杯。

+0

我收到一个异常:'org.grails.core.exceptions.GrailsDomainException:未找到标识属性,但在域类中需要'。我的IDE也告诉我persistantProperties已被弃用。 – Anonymous1

+0

你的grails版本是什么? PersonCommand是一个DomainClass? –

+0

在互联网上看到我看到的界面太多http://docs.grails.org/latest/api/org/codehaus/groovy/grails/commons/GrailsDomainClass.html#getPersistentProperties()和http://docs.grails.org /latest/api/grails/core/GrailsDomainClass.html,在我看来,唯一改变的是该软件包。 –