开发者

Grails data binding

A Grails controller received is called with the following request parameters:

defaultPrice开发者_C百科[0].amount  22
defaultPrice[0].currency 1
defaultPrice[0].id  
defaultPrice[1].amount  33
defaultPrice[1].currency 3
defaultPrice[1].id  

I've defined the following command class:

class PriceCommand {
    BigDecimal amount
    Integer currency
    Integer id
}

I attempt to bind the request parameters to a `List' in the action

def save = {List<PriceCommand> defaultPrice ->

}

But within the action, defaultPrice is null.


It requires an command with existing list of data, with specified name, that will be filled with data from request.

Try

import org.apache.commons.collections.ListUtils
import org.apache.commons.collections.Factory

class PriceListCommand {
   List<PriceCommand> defaultPrice = ListUtils.lazyList([], {new PriceCommand()} as Factory)
}

and use this command inside controller. It should works


I'm not sure if this is what your looking but it may help...

1.) I think indexed params only work if you have a parent-child or one-to-many relationship. For example you might need to introduce a PriceCommandParent which contains a list of PriceCommand. I may be wrong on this and I welcome any corrections.

2.) I've found that indexed params aren't as magically as some of the other areas of Grails/Groovy so sometimes i'd rather deal with the mapping myself. Below is how i've handled it in the past....

def things = []

params.each{name, value->
    if (name.matches('^(thing\\[\\d+\\])$')){ //<-- look for 'thing[x]'
        things.add(new Thing(params[name]);
    }   
}

Let me know if any of this is of help

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜