Grails: नेस्टेड कमान ऑब्जेक्ट्स




groovy grails-validation (2)

मेरे grails ऐप में मेरे पास बाहरी कमांड ऑब्जेक्ट है जिसमें अन्य कमांड ऑब्जेक्ट्स की सूची है:

public class OuterCommand {

    List<InnerCommand> innerCommands = ListUtils.lazyList([], FactoryUtils.instantiateFactory(InnerCommand))
}

class InnerCommand {
    String code
    Long id
    String value

    static constraints = {
        code(nullable: false, blank: false)
        value(nullable: false, blank: false)
    }
}

innerCommands का असामान्य असाधारण इस सलाह पर आधारित है। हालांकि, मुझे लगता है कि यदि मैं OuterCommand एक उदाहरण पर validate() कॉल करता OuterCommand , तो सत्यापन OuterCommand के निहित उदाहरणों को मान्य नहीं करता है।

क्या नेस्ट कमांड ऑब्जेक्ट्स के लिए संभव है और जब validate() को बाहरीतम ऑब्जेक्ट पर कॉल किया जाता है, तो ऑब्जेक्ट ऑब्जेक्ट के पूरे ग्राफ़ को मान्य किया जाता है?

धन्यवाद, डॉन


मुझे नहीं लगता कि कमांड या नेस्टेड कमांड में डोमेन ऑब्जेक्ट्स को डिफ़ॉल्ट रूप से मान्य किया गया है, आपको एक मान्यकर्ता लिखना होगा जो आंतरिक कॉमांड्स के माध्यम से छोरता है और उन सभी को मान्य करता है

static constraints = {
    innerCommands(validator:{val,obj ->
        //validate and merge errors from each innerCommand
    })
}

आपको संभवत: त्रुटियाँ ऑब्जेक्ट को संभालना होगा और सभी परिणामों को एक साथ मर्ज करना होगा, लेकिन यह बहुत कठिन नहीं है।


इन चरणों का पालन करके मुझे यह काम मिला है:

आंतरिक कमांड ऑब्जेक्ट को वैध बनाने के बाद से इसे एक सामान्य कमांड ऑब्जेक्ट की तरह तत्काल नहीं मिल रहा है। ऐसा करने के दो तरीके हैं, @org.codehaus.groovy.grails.validation.Validateable एनोटेशन के साथ, या grails config पैरामीटर grails.validateable.classes

आंतरिक कॉमांड्स टू ओटर कॉमांड के लिए एक कस्टम सत्यापनकर्ता को जोड़ना

static constraints = {
    innerCommands(validator: {val, obj ->
        // 'attributes.validation.failed' is the key for the message that will
        // be shown if validation of innerCommands fails
        return val.every { it.validate() } ?: ['attributes.validation.failed'] 
    })
}