我有一个查询页面,此页面可以选择类别和子类别,同时创建新查询。对于exaple:
Main Category
Sub Category
Sub Category
Sub Category
Main Category
Sub Category
Sub Category
Sub Category
Main Category
Sub Category
Sub Category
Sub Category
用户可以从查询页面中选择多个类别和子类别。
以下是与类别和SubCategory相关的域类:
Category.groovy
class Category {
String name
String description
static constraints = {
}
static hasMany = [ subCategories: SubCategory ]
}
SubCategory.groovy
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>
**在EnquiryController.groovy中创建我要保存类别和子类别的操作。**
def create = { EnquiryCommand enquiryCommand ->
def enquiry = null
try {
enquiry = new Enquiry( params)
//def sub = Category.get(params.catId)
def sub = params.list('catId').get(0)
def subCat= params.list('subId').get(0)
//enquiry.properties = params
/*
def String[] tags = params.tagsList.split(",")
for (def tag : tags) {
Tag tagObject = new Tag();
tagObject.tag = tag ;
enquiry.addToTags( tagObject)
}
*/
int enquiryId = enquiryService.createEnquiry( enquiry ,enquiryCommand )
if ( !enquiry.hasErrors()){
flash.put("enquiry", "enquiry created")
redirect( action: sentEnquiry )
}else {
render (view: "showCreateEnquiry" , model:["enquiryInstance" : enquiryCommand] )
}
}catch ( DataserviceException e ){
render (view: "showCreateEnquiry" , model:["enquiryInstance" : enquiryCommand] )
}
问题:
如何在控制器中获取这些多个选定的类别和子类别并保存在db中。 有人建议我在创建动作中创建一个groovy Map,并从GSP模板中获取类别和子类别列表。还建议我使用Map的键来存储类别和值的ID,以存储与这些类别相关的子类别ID列表。
怎么可以做到?
答案 0 :(得分:2)
当您使用html
中的列表时,name
属性必须相同,并且您可以通过id
属性识别班级实例的value
。将其翻译为代码,您有:
<g:each in="" var="sub">
<g:checkBox name="subcategories" value="${sub.id}" />
</g:each>
在您的控制器中,您可以使用以下内容转换params
中List
的内容:
def subcategories = params.list('subcategories')
然后,您只需按id
查询记录。
subcategories.each { id ->
SubCategory sub = SubCategory.get(id)
}