Bind a list of objects into a Grails command?

MaxR

New member
I have 2 command objects, one of them contained List of other

Code:
@grails.validation.Validateable
class SongCommand {

    String title
    List<CoupletCommand> coupletCommandList = [].withLazyDefault {new CoupletCommand()}
    Boolean isChorusRepeat

    static constraints = {
        title blank: false, size: 1..129
        coupletCommandList validator: { couplets, obj ->
            def isValid = true
            couplets.each {
                isValid = isValid && it.validate()
            }
            return isValid
        }
    }
}
class CoupletCommand {

    Integer coupletPosition
    String coupletText
    Boolean isChorus

    static constraints = {
        coupletText blank: false, size:20..700
        isChorus nullable: true
    }
}

From front end to controller I passed something like this

[coupletText:2342342352342, coupletPosition:1, isChorus:false]
[coupletText:frfsdfsdf, coupletPosition:2, isChorus:true]
......
[coupletText:sd9f9s9df9, coupletPosition:n, isChorus:false]

when try save list of couplets on controller

Code:
def saveCouplets() {
        def songCommand = new SongCommand()
        // bad, but not necessary now
        def count = session['songId'] as Integer
        def bindingMap
        for (int i = 1; i <= count; i++) {
            bindingMap = [coupletText: params['coupletText-' + i],
                          coupletPosition: params['coupletPosition-' + i],
                          isChorus: (params['isChorus-' + i]) ? params['isChorus-' + i] : false]
            songCommand.coupletCommandList.add(bindingMap)
        }

        //Validate it
        //if valid
        if (songCommand.validate()) {
            coupletService.addCouplets(bindingMap, params)
        } else {
            render model: [command: songCommand]
        }
        //else render view show model [command: command]
    }

I receive error message

Code:
groovy.lang.MissingMethodException Message No signature of method: java.util.LinkedHashMap.validate() is applicable for argument types: () values: [] Possible solutions: wait(), values(), values()
 
Top