【问题标题】:Grails form submit populates an Integer field with a StringGrails 表单提交使用字符串填充整数字段
【发布时间】:2016-03-21 20:09:31
【问题描述】:

我有一个以整数作为键的映射,但是当我提交表单时,该键变成了字符串。

1) 我什至不明白这怎么可能。我的地图明确指出只有整数可以是键,但它是用字符串填充的?可能只是一些 Groovy 的东西......

2) 假设 #1 只是一些奇怪的东西,我怎么能强制我的 questions 映射 keySet 填充我想要的整数而不是字符串?

class ApplicationCommand implements Validateable {
    Map<Integer,String[]> questions = new LinkedHashMap<Integer,String[]>();
}

<g:textField name="cmd.questions[14]" value="${cmd.questions[14][0]}" />

def save(ApplicationCommand cmd) {
    System.out.println(cmd.questions.containsKey(14));  //FALSE
    System.out.println(cmd.questions.containsKey("14"));  //TRUE

    ....
}

编辑:Grails 3.1

【问题讨论】:

  • textField 名称不应该只是 "questions[14]" 而不是 "c​​md.questions[14]" 吗?顺便说一句,哪个 grails 版本?
  • @aldrin 如果我不添加 cmd 那么我的命令对象根本不会被填充。 Grails 3.1,我用该信息更新了我的 OP。
  • 它在 Grails 2.x 中按预期工作,所以他们一定在 3 中改变了一些东西。绝对感觉很奇怪,可能是一个错误。
  • @aldrin 也许吧,我不知道。很多关于 Grails 的东西都感觉不对,但事实证明它是设计使然,所以我不再质疑它,我只是想知道如何使用它。

标签: forms grails groovy


【解决方案1】:

我相信您需要使用 GrailsParameterMap 并明确调用方法,例如:

map.getInt(key)

我不确定有更好的方法,即兴发挥。当提交多个同名值并被解释为一个列表时,这个类也非常有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2019-03-26
    相关资源
    最近更新 更多