2011-07-25 43 views
0

一個Grails控制器:Grails的數據綁定接收調用與以下請求參數

defaultPrice[0].amount 22 
defaultPrice[0].currency 1 
defaultPrice[0].id 
defaultPrice[1].amount 33 
defaultPrice[1].currency 3 
defaultPrice[1].id 

我定義下面的命令類:

class PriceCommand { 
    BigDecimal amount 
    Integer currency 
    Integer id 
} 

我嘗試綁定請求參數到在動作

def save = {List<PriceCommand> defaultPrice -> 

} 

但行動中'名單」,defaultPrice是空值。

回答

3

它需要一個帶有指定名稱的現有列表的命令,該命令將填充來自請求的數據。

嘗試

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

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

,並使用內部控制器此命令。它應該工作

1

我不知道,如果這是你想找什麼,但它可以幫助...

1)我想如果你有一個父子或一對一索引PARAMS只工作很多關係。例如,您可能需要引入一個PriceCommandParent,其中包含一個PriceCommand的列表。 我可能在這個錯了,我歡迎任何更正。

2.)我發現索引參數並不像Grails/Groovy的其他一些領域那麼神奇,所以有時我寧願自己處理映射。下面是我如何在過去處理它....

def things = [] 

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

讓我知道如果任何這是幫助