代码之家  ›  专栏  ›  技术社区  ›  nathan

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

  •  1
  • nathan  · 技术社区  · 14 年前

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

     <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 回复  |  直到 10 年前
        1
  •  5
  •   omarello    14 年前

    把名字改成

    <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
    }
    
        2
  •  1
  •   user439828    14 年前

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

    你可能还需要 name="contact.organizations" 成为 name="contact.organizations.id" 还有另一个特点 optionKey="id"

        3
  •  0
  •   user439828    14 年前

    在最近编辑的域示例中,联系人和组织之间没有一对多关系。你有一对多的组织联系方式。

    所以

    value="${contact?.organizations}"
    

    总是一个项目,而不是一个列表。

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