2016-10-11 74 views
0

在下面的代碼中發生了一些奇怪的事情。我成功地創建了一個映射,如輸出中所示,我有鍵和值,但無法使用鍵檢索值。Groovy Grails - 通過鍵從地圖檢索值的問題

見代碼及以下的輸出:

class HomeController { 

def index() { 
    List gs=Gizmo.getAll() 
    def gizmoList= gs.collectEntries { 
     [(it.id): (it.name)] 
    } 


    println "item 2 is ${gizmoList['2']}" 

    println "item 2 is ${gizmoList[2]}" 
    println "keyset is " + gizmoList.keySet().toList().toString() 
    println "values are" + gizmoList.values().toList().toString() 
    [myList: gizmoList ] 
} 
} 

控制檯輸出爲:

item 2 is null 
item 2 is null 
keyset is [1, 2, 3] 
values are[flange, nork, prule] 

不知怎的,我想也許鍵GStringImpl什麼的,但我認爲把括號周圍會強制爲普通字符串。

+0

'Gizmo'是域類,對吧? –

+0

查找關鍵字類型很簡單 - 'println gizmoList.keySet()*。getClass()*。name'。如果您使用GStrings作爲地圖鍵停止。谷歌它已經有很多關於他們爲什麼會成爲問題的討論,例如http://www.groovy-lang.org/mailing-lists.html#nabble-td4511883 –

回答

1

在Grails中,id的是Long,所以找不到您的StringInteger鍵。

這個片段的工作:

assert "item 2 is ${gizmoList[2l]}" == "item 2 is nork" 
+0

是的,就是這樣。謝謝。 – user1023110

0

嗯不知道,但當我在Groovy Web控制檯上嘗試類似時,它工作正常。見後附:

Similar code

因此,對我來說,它看起來像什麼毛病或者Grails的,或者你正在做的事情是錯誤的。 請再試一次,並檢查是否有任何可能的錯誤。