次のドメイン クラスがあるとします。最初のドメイン クラス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