1

次のドメイン クラスがあるとします。最初のドメイン クラスTag.groovyでは、さまざまなレイヤー (レイヤー 1、レイヤー 2、およびレイヤー 3) を持つ動的なカテゴリ構造を構築できます。の各アクティビティActivity.groovyは特定のカテゴリに属し、 を介してそのカテゴリに接続されていますActivityTag.groovy。ここまでは順調ですね。:)

Tag.groovy

class Tag {
    String name
    String layer
    Tag parent
    static transients = ['activityCount', 'children']
    int activityCount
    static constraints = {
        name    nullable: false, unique: true
        layer   nullable: false, inList:['generic','layer1','layer2','layer3']
        parent  nullable: true
    }
    Set<Tag> getChildren() {
        return Tag.findAllByParent(this) as Set
    }
    Set<Activity> getActivities() {
        return ActivityTag.findAllByTag(this)*.activity
    }
    Set<Activity> getActivities(VirtualCity virtualCity) {
        def activitiesWithTag = ActivityTag.findAllByTag(this)*.activity
        return activitiesWithTag.findAll({it.virtualCity==virtualCity})
    }
    def getActivityCount(){
        if (this.layer == "layer1") {
            return this.children*.children*.activityCount.sum().sum()
        } else if (this.layer == "layer2") {
            return this.children*.activityCount.sum()
        } else {
            return this.getActivities().size()
        }
    }
    def getActivityCount(VirtualCity virtualCity){
        if (this.layer == "layer1") {
            return this.children*.children*.activityCount.sum().sum()
        } else if (this.layer == "layer2") {
            return this.children*.activityCount.sum()
        } else {
            return this.getActivities(virtualCity).size()
        }
    }
}

Activity.groovy

class ActivityTag {console
    Activity activity
    Tag tag
    static mapping = {
        id composite: ['activity', 'tag']
        version false
    }
}

ActivityTag.groovy

class Activity {
    VirtualCity virtualCity
    String name
}

ここで、ツリー ビューでカテゴリを JSON としてレンダリングしたいと考えています。どうすればこれを達成できるか教えてもらえますか?

私は試したrender(template: "tree", collection: Tag.findAllByLayer("layer1"), var: 'tag')

このテンプレートで_tree.gson:

model {
    Tag tag
}

json {
    id              tag.id
    name            tag.name
    activityCount   tag?.activityCount ?: null
    children        g.render(template: 'tree', collection: tag?.children, var: 'tag') ?: null
}

しかし、この方法は失敗しますjava.lang.reflect.InvocationTargetException: null

4

0 に答える 0