2016-05-24 59 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,在我看來,唯一改變的是該軟件包。 –