0

マップのリストを持つ Grails コマンド オブジェクトがあります。マップ キーは、数値のドメイン オブジェクト ID となるように意図されています。

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

リスト/マップへのデータ バインディングは、動的なリスト展開により、一般的に機能しています。

ただし、POST では、マップ キーは文字列としてバインドされており、フォームが最初に入力されたときと同じように、それらを Long にしたいと考えています。foo[123]ではなく、マップに入れたいfoo['123']

あるいは、[]オペレーターが参照する数値 ID キーを指定して正しい値を見つけた場合、私は満足します。foo[123]つまり、と同じ値を返すことができればfoo['123']、それも機能します。

これを希望どおりに動作させる方法はありますか? たぶん、マップを強く入力しますか?

それともより良いアプローチですか?

4

1 に答える 1

0

プロパティをマップに挿入して、キーをinjectに変換できます。例えば:StringLong

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'
于 2013-05-06T16:24:47.283 に答える