在Grails中如何捕获g中的多个选定项:select?

时间:2010-09-04 20:59:46

标签: grails views layout

我有一个Contact Domain类,可以与多个组织关联,这些组织也是域类。我想使用多选框来允许用户选择与当前联系人关联的组织。选择框中填充了可用的组织。如何将所选项目分配到我的Contact类中的组织列表?

 <g:select name="organizations.id"  
           multiple="multiple" 
           optionKey="id" 
           from="${com.ur.Organization.list()}" 
           value="${contact?.organizations}" />

以上是我目前正在尝试的内容,虽然它确实填充了组织的选择,但它似乎并未将所选项目放在我的组织字段中。

感谢您的任何建议。

编辑: 来自krsjunk和omarello的评论。

这是域类的缩写版本。

class Contact{
    static searchable = true
    static mapping = {
        sort "lastName"
    }
    String firstName
    String lastName
    .  
    .
    .
    static belongsTo = [organizations:Organization, projects:Project]
}

class Organization {
    static searchable = true
    static mapping = {
        sort "name"
    }
    String name
    static hasMany = [contacts:Contact]
}

3 个答案:

答案 0 :(得分:5)

好吧,只需将名称更改为

即可
<g:select name="organizations"  multiple="multiple" 
          optionKey="id" 
          from="${com.ur.Organization.list()}" 
          value="${contact?.organizations}" />

应该正常工作,只是尝试过。

注意我的域名定义如下所示(以防万一你有不同的

class Contact {

    static constraints = {
    }

    static hasMany = [organizations:Organization]

    String name
}


class Organization {

    static constraints = {
    }

    static hasMany = [contacts:Contact]
    static belongsTo = [Contact]

    String name
}

答案 1 :(得分:1)

一个问题是value="contact?.organizations"应该是value="${contact?.organizations}" - 不确定这是否是整个问题。 (另外,如果value是集合,则不需要属性multiple=".."

您可能还需要name="contact.organizations"name="contact.organizations.id",其他属性为optionKey="id"

答案 2 :(得分:0)

在新编辑的域示例中,您在联系人和组织之间没有一对多的关系。您有来自组织的一对多联系人。

所以

value="${contact?.organizations}"

将始终是单个项目,绝不是列表。

尝试为联系人选择/分配多个组织永远无效。