1
我正在尝试向当前登录的用户(这是组织)添加类别和子类别。我可以将类别添加到用户(组织),但无法添加子类别。grails中的类别和子类别
协会:
Organization hasMany = [follows: SubCategory]
Category hasMany = [ subCategories: SubCategory ]
SubCategory belongsTo = [ category: Category]
类别和子类别结构:
Main Category
Sub Category
Sub Category
Sub Category
Main Category
Sub Category
Sub Category
Sub Category
Main Category
Sub Category
Sub Category
Sub Category
注:当我选择的任何主要类别,它需要我与此相关的类别和我子类别列表想要选择并将这些subCategories添加到组织。
Organization.groovy
class Organization extends Party{
String orgName
Person contact
String orgSize
boolean isVendor = false
static hasMany = [follows: SubCategory]
static constraints = {
orgName blank: false
orgSize blank: false
}
}
Category.groovy
class Category {
String name
String description
static constraints = {
subCategories nullable:true
}
static hasMany = [ subCategories: SubCategory ]
}
SubCategory.groovy
class SubCategory {
String name
static hasMany = [requirements: Enquiry]
static belongsTo = [ category: Category]
static constraints = {
requirements nullable:true
}
}
在上述控制器
OrganizationController.groovy
class OrganizationController {
def saltSource
def userCache
def springSecurityService
def mailService
def messageSource
def organizationService
def subscriberService
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
def index() {
redirect(action: "list", params: params)
}
def list() {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
[organizationInstanceList: Organization.list(params), organizationInstanceTotal: Organization.count()]
}
def profile() {
Subscriber loggedinSubscriber = subscriberService.getLoggedinSubscriber()
Party organization = loggedinSubscriber?.customer?.party
Party person = organization?.contact
[orgInstance: organization, personInstance: person]
}
def update() {
def orgInstance = organizationService.getOrganization(params.id)
orgInstance.properties = params
orgInstance?.contact?.properties = params
println params
try {
organizationService.updateOrganization(orgInstance)
}
catch (CustomValidationException e){
flash.message = e.sMessage
}
catch (ServiceException s) {
flash.message = s.message
}
render(view: "_org", model: [orgInstance: orgInstance])
}
def follow() {
Subscriber loggedinSubscriber = subscriberService.getLoggedinSubscriber()
Party organization = loggedinSubscriber?.customer?.party
def subparams = params.subcategories
println subparams
def marketInstance = Category.get(params.abc)
def subMarket = getsubCategories(params.subcategories)
def follower = new Follower()
follower.followedBy = organization
follower.category = marketInstance
follower.subCategory = subMarket
follower.save(failOnError: true);
flash.msg = "Okay. This market is now on your watchlist."
redirect (action: "profile")
}
}
后续行动负责添加类别和子类别来组织(用户).I试图用下面的代码
DEF子市场= getsubCategories(params.subcategories) follower.subCategory =次级市场
在后续行动,但得到
No signature of method: com.vproc.member.OrganizationController.getsubCategories() is applicable for argument types: ([Ljava.lang.String;) values: [[2, 1, 3]] error.
subCategory.gsp
<g:form controller="organization" params="[temp : marketInstance?.id]" action="follow" method="post">
<g:hiddenField name="id" name= "abc" value="${marketInstance?.id}" />
<g:hiddenField name="id" value="${subcategory?.id}" />
<div style="margin-left:200px">
<input type="button" class="button-inner" id="check1" value="Check All" />
<input type="hidden" id="isChkd" value="true" />
<g:each var="subcategory" in="${subCategroyInstanceList}">
<div>
<g:checkBox class="cb1-element" name="subcategories" value="${subcategory.id}"/>
<label for="subcategories"> ${subcategory.name}</label>
</div>
</g:each>
<button class="btn btn-inverse">Submit</button>
</div>
</g:form>
问题: 如何获得选定的子类别,并使用后续行动将它们添加到组织。
嗨@ sergio-michels感谢您的回复。我试着用你的建议def sub = params.list('subcategories') sub.each {id - > follower.subCategory = sub }但是我得到的错误就像参数类型不匹配在follower.subCategory = sub。对此有任何建议。 –
你只有id,所以你需要在添加到列表之前获取Subcategory实例。 –
为了更清楚:'follower.addToSubCategories(SubCategory.get(id))' –