gpt4 book ai didi

grails - 如何在 Config.groovy 的 Grails 中使用 NodeBuilder 分配嵌套结构?

转载 作者:行者123 更新时间:2023-12-02 13:58:00 25 4
gpt4 key购买 nike

我正在尝试使用 Config.groovy 中的构建器语法绘制用于导航的站点结构,如下所示:

com.foo.demo.siteStructure = NodeBuilder.newInstance().site() {
item(controller: 'sample', action: 'list')
item(controller: 'address', action: 'list') {
item(controller: 'city', action: 'list', title: 'Municipality')
}
}

这在调试器中产生的对象是:
site[attributes={}; value=[item[attributes={controller=sample, action=list}; value=[]], item[attributes={controller=city, action=list, title=Municipality}; value=[]]]]

所以它似乎只深入一层,并用它包含的一项替换第二项。

如果我预定义一个 Item 对象并使用 ObjectGraphBuilder,我会得到相同的单层嵌套:
class Item {
String controller
String action
String title
SiteNode parent
List<Item> items = []
}

因此,看起来 ConfigSlurper 正在以某种方式破坏结果。有没有更好的方法将嵌套结构标记为配置值?

最佳答案

我确实通过调整资源插件读取配置的方式来实现这一点。我首先将配置值更改为常规关闭:

com.foo.demo.siteStructure = {
root {
item(controller: 'sample', action: 'list')
item(controller: 'address', action: 'list') {
item(controller: 'city', action: 'list', title: 'Municipality')
}
}
}

然后在单例中对 dsl 进行了实际处理(类似这样):
Node root
def menus = grailsApplication.config.com.foo.demo.siteStructure
if (menus instanceof Closure) {
def builder = new NodeBuilder()
menus.delegate = builder
menus.resolveStrategy = Closure.DELEGATE_FIRST
root = menus()
}

关于grails - 如何在 Config.groovy 的 Grails 中使用 NodeBuilder 分配嵌套结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com