如何使用Grails在数据库中保存类别和相关子类别

如何使用Grails在数据库中保存类别和相关子类别,grails,map,gorm,Grails,Map,Gorm,我有一个查询页面,在创建新查询时,此页面可以选择类别和子类别。例如: Main Category Sub Category Sub Category Sub Category Main Category Sub Category Sub Category Sub Category Main Category Sub Category Sub Category Sub Category 用户可以从查询页面选择多个类别和子类别 以下是与类别和子类别相关的领域分类: Categ

我有一个查询页面,在创建新查询时,此页面可以选择类别和子类别。例如:

Main Category
 Sub Category
 Sub Category
 Sub Category

Main Category
 Sub Category
 Sub Category
 Sub Category

Main Category
 Sub Category
 Sub Category
 Sub Category
用户可以从查询页面选择多个类别和子类别

以下是与类别和子类别相关的领域分类:

Category.groovy

class Category {

    String name
    String description
    static constraints = {
    }
    static hasMany = [ subCategories: SubCategory ]

}
class SubCategory {

        String name

        static hasMany = [requirements: Enquiry]
        static belongsTo = [ category: Category]
        static constraints = {
            requirements nullable:true
        }
    }
子类别。groovy

class Category {

    String name
    String description
    static constraints = {
    }
    static hasMany = [ subCategories: SubCategory ]

}
class SubCategory {

        String name

        static hasMany = [requirements: Enquiry]
        static belongsTo = [ category: Category]
        static constraints = {
            requirements nullable:true
        }
    }
注意:下面的域用于保存查询页面中选定的类别和子类别。

class RegisteredCategories {

  Enquiry enquiry
  Category category

  static constraints = {

  }

  static hasMany = [ subCategories: SubCategory ]
}
在查询页面上显示类别和子类别的GSP模板:

<g:each in="${marketlist}" status="j" var="category">
     <g:hiddenField  id="${j}"  name="catId.${category.id}" value="${category?.id}"  />
       <DIV class="market-name">
        <p>${category.name}</p>
       </DIV>
       <g:each in="${category.subCategories}" status="i" var="subCategory">
        <div>
            <g:checkBox class="cb1-element" id="check${i}"  name="subId.${subCategory.id}" value="on"/>
            <label for="check${i}" > ${subCategory.name}</label>
       </g:each>
    </g:each>
问题:

<g:each in="${marketlist}" status="j" var="category">
     <g:hiddenField  id="${j}"  name="catId.${category.id}" value="${category?.id}"  />
       <DIV class="market-name">
        <p>${category.name}</p>
       </DIV>
       <g:each in="${category.subCategories}" status="i" var="subCategory">
        <div>
            <g:checkBox class="cb1-element" id="check${i}"  name="subId.${subCategory.id}" value="on"/>
            <label for="check${i}" > ${subCategory.name}</label>
       </g:each>
    </g:each>
如何在控制器中获取多个选定类别和子类别并保存在数据库中。 有人建议我在createaction中创建一个groovy映射,并从GSP模板中获取类别和子类别的列表。还建议我使用Map键存储类别ID,并使用值存储与该类别相关的子类别ID列表


如何才能做到这一点?

当您在
html
中使用列表时,您的
名称
属性必须相同,并且您可以通过
属性识别类实例的
id
。将其转换为代码,您有:

<g:each in="" var="sub">
  <g:checkBox name="subcategories" value="${sub.id}" />
</g:each>
然后,您只需通过
id
查询记录即可

subcategories.each { id ->
  SubCategory sub = SubCategory.get(id)
}

嗨@emilan,我能在这个问题上得到帮助吗?嗨@sérgio michels,我想对于这个解决方案,我可能需要使用地图。例如:all=[[parameter:'foo',value:'aaa'],[parameter:'foo',value:'bbb'],[parameter:'bar',value:'ccc'],[parameter:'baz',value:'ddd']]def myMap=[:]默认值为{[]}all.each{myMap[it.parameter]hi@sergio michels,use可以选择多个类别和子类别。如何处理这个?使用两个列表,一个用于类别,另一个用于子类别。hi@sergio michels,我创建了以下列表来获取类别和子类别。def sub=params.list('catId')。get(0)def subCat=params.list('subId')。get(0).这样可以吗?如果可以,我如何将它们与地图一起使用。?嗨@stefan Armburster,我能在这个问题上得到一些帮助吗?我想像你在