2012-08-24 59 views
4

在我的系統上執行以下操作,其正常工作一個地方:如何動態創建一個包含帕拉姆名稱數組語法

log.debug params."${tagType}"_${i}" //resolves to, e.g : params.title_0 

此外,以下也適用:

log.debug params."${'setTagtypesList[0].tagtype.id'} // hard coded 0 index 

(請注意,以上解析爲params.'setTagtypesList[0].tagtype.id'以及單引號是必要的。)

但是,下面的params請求導致NULL:

def someInt = 0 
log.debug params."'setTagtypesList[someInt].tagtype.id'" //dynamic index 

所以,我怎麼能動態地創建一個包含數組語法設置了一個param的名字嗎?我正在使用Grails 1.3.9。

+0

這裏是我最初搞混亂的地方:我以「$ {params.setTagtypesList [0] .tagtype.id}」開頭,這不起作用。但我發現「$ {params.setTagtypesList [0] .tagtype.id'}」確實有效。所以我覺得我需要單引號。但最後問題是我需要的是params。「$ {...}」。 –

回答

2

有各種各樣的方式來實現你想要的東西,包括:

params."setTagtypesList[${someInt}].tagtype.id" 
params['setTagtypesList[' + someInt + '].tagtype.id'] 

這兩者最終都是速記

params.get('setTagtypesList[' + someInt + '].tagtype.id') 

與GString的需要記住的是,裏面${}什麼是Groovy表達,大括號外的任何內容都是從字面上理解的。

但是請注意,

params["setTagtypesList[${someInt}].tagtype.id"] 

可能會的工作,因爲它正在尋找了一個GString的關鍵,而不是一個字符串映射條目。屬性訪問點符號在查找之前會在關鍵字上隱含toString(),這是您需要了解字符串和GStrings之間區別的一種情況。