1

假设我有以下领域类: 第一个领域类Tag.groovy允许我构建具有不同层(层 1、层 2 和层 3)的动态类别结构。来自的每个活动都Activity.groovy属于某个类别,并通过 连接到其类别ActivityTag.groovy。到目前为止,一切都很好。:)

标签.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()
        }
    }
}

活动.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