【问题标题】:How can I select multiple values from the inList constraint in Grails?如何从 Grails 的 inList 约束中选择多个值?
【发布时间】:2014-02-25 11:59:39
【问题描述】:

我是 Grails 的新手,显然遗漏了一些东西。但是什么?!

我创建了一个带有 String 属性类别的 DomainClass An。在我定义的约束中,这个类别应该有多个(列表)值:

class An {
 String category
 static constraints = {
  category nullable: true, inList:["do", "me", "a", "favour"]  
 }
}

在视图中显示为多选框:

<g:select name="category" from="${anInstance.constraints.category.inList}" 
          value="${anInstance?.category}" 
          valueMessagePrefix="a.category"
          noSelection="${['': 'Please select one ...'}"
          multiple="multiple" size="5"/>

保存方式为标准:

def save = {
 def anInstance = new An(params)
  if (anInstance.save(flush: true)){
        flash.message = "${message(..)}"
        redirect(action: "show", id: anInstance.id)
    } else {
        render(view: "create", model: [anInstance: anInstance])
    }
}

当我只选择/保存一个值时,它会按预期选择/显示/保存。 当我想从此列表中选择/保存许多值时,我收到一条消息,即所选值不在列表中(default.not.inlist.message):

Property [category] of class [class An] with value [do, me, a, favour] is not contained within the list [[do, me, a, favour]].

感谢任何提示。


编辑:

正如猫先生所指出的,我的一个错误是将类别属性定义为String 而不是List&lt;String&gt;。现在选中的值显示为选中,但错误消息(default.not.inlist.message)仍然存在。

【问题讨论】:

  • 能否粘贴返回的错误和执行保存操作的代码?
  • 但是你为什么要尝试通过多选将字符串值列表设置为一个简单的字符串变量?
  • 如果将约束更改为inList:["do", "me", "a", "favour"].permutations() as List 会发生什么?不过,您必须更改您的选择标签才能从其他地方获取其值。
  • 我得到一个错误说约束 inList 应该实现接口java.util.List
  • 这就是as List 的用途。如果您遇到该错误,您可能需要一些括号。

标签: grails constraints multi-select grails-constraints


【解决方案1】:

在选择框中选择多个项目会导致在控制器中您获得一个字符串列表,然后您尝试将此列表存储在单个字符串字段中,这显然是错误的,特别是没有通过您的 costraint

【讨论】:

  • 我读到你的答案有点晚了.. 但猫先生指出了相同的方向。
【解决方案2】:

切换你的约束
category nullable: true, inList:["do", "me", "a", "favour"]

category nullable: true, inList: (["do", "me", "a", "favour"].subsequences() as List)

这将生成以下内容,涵盖您的所有基础:

[[do, me, a, favour], [a, favour], [a], [me, a, favour], [do, a], [do, me, a], [do, a, favour], [me], [favour], [do, me, favour], [do, me], [me, favour], [do], [me, a], [do, favour]]

【讨论】:

  • 有了这个我仍然收到错误消息(default.not.inlist.message):属性[类别]的类[类An]的值为[do,me]不包含在列表中[ [做,我],[做],(等等)]。
  • 类 [class An] 的属性 [category] ​​的值为 [[[a], [me]]] 不包含在列表 [[[do, me, a, favour], [ a, favour], [a], [me, a, favour], [do, a], [do, me, a], [do, a, favour], [me], [favour], [do, me, favour], [do, me], [do], [me, favour], [me, a], [do, favour]]] .. 抱歉,在我之前的帖子中我忘记了另外两个方括号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多