1

現在ログインしているユーザー(組織)にカテゴリとサブカテゴリを追加しようとしています。ユーザー (組織) にカテゴリを追加できますが、サブカテゴリを追加できません。

協会:

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 

注: メイン カテゴリを選択すると、このカテゴリに関連するサブカテゴリのリストが表示されるので、それらのサブカテゴリを選択して組織に追加します。

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")
    }
}

上記のコントローラーのフォローアクションは、組織(ユーザー)にカテゴリとサブカテゴリを追加する責任があります。次のコードで試しました

def subMarket = getsubCategories(params.subcategories) follower.subCategory = subMarket

フォローアクションではあるが取得中

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>

問題: 選択したサブカテゴリを取得し、フォロー アクションを使用してそれらを組織に追加する方法。

4

1 に答える 1

0

すでにすべてのチェックボックスに同じnameものを使用しているため、コントローラーでリストに変換できます。

def sub = params.list('subcategories')
sub.each { id ->
   ... //add to your organization.
}

これは、 に関連付ける必要がある id のリストOrganizationです。更新する場合は、新しいものを追加する前に、既に関連付けられていてリストにないものを削除する必要があります。

于 2013-10-30T13:33:29.350 に答える