【问题标题】:Grails data binding to command object with maps - convert key to number使用地图将 Grails 数据绑定到命令对象 - 将键转换为数字
【发布时间】:2013-05-09 14:35:00
【问题描述】:

我有一个带有地图列表的 Grails 命令对象。映射键旨在成为数字域对象 ID。

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

由于动态列表扩展,与列表/地图的数据绑定通常可以正常工作。

但是,在 POST 中,映射键被绑定为字符串,我希望它们是 Long,就像最初填充表单时一样。我想要在我的地图中出现foo[123],而不是foo['123']

或者,如果[] 运算符在给定数字 ID 键的情况下找到正确的值,我会很满意。换句话说,如果我能让foo[123] 返回与foo['123'] 相同的值,那也可以。

有什么方法可以让它按我想要的方式工作吗?也许强烈键入地图?

或者更好的方法?

【问题讨论】:

    标签: grails data-binding groovy


    【解决方案1】:

    您可以将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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多