2013-05-06 24 views
0

我有一個帶有映射列表的Grails命令對象。地圖密鑰旨在成爲數字域對象ID。Grails將數據綁定到帶有映射的命令對象 - 將鍵轉換爲數字

class MyCommand { 
    def grid = [].withDefault { [:] } 
} 

由於動態列表擴展,與列表/地圖的數據綁定工作正常。

但是,在POST中,映射鍵被綁定爲字符串,我希望它們是Longs,就像它們在表單初始填充時一樣。我想在我的地圖中使用foo[123],而不是foo['123']

或者我會很滿意,如果[]運營商發現給定的數字ID鍵查找正確的值。換句話說,如果我能得到foo[123]返回與foo['123']相同的值,那也可以。

有什麼辦法讓我按照自己的方式工作?也許強烈輸入地圖?

還是更好的方法?

回答

0

您可以將inject的財產放入地圖,將String鑰匙轉換爲Long。例如:

def myMap = [:] << ['1': "name"] << ['Test': "bobo"] 
def result = myMap.inject([:]){map, v -> 
    def newKey = v.key.isNumber() ? v.key.toLong() : v.key 
    map[newKey] = v.value 
    map 
} 

assert myMap['1'] == 'name' 
assert result[1L] == 'name' 
assert result['Test'] == 'bobo' 
相關問題