gpt4 book ai didi

Grails 标记不解析其主体中的变量

转载 作者:行者123 更新时间:2023-12-02 14:46:52 24 4
gpt4 key购买 nike

我认为在 grails 标签中解析变量时我遇到了一些困难。

在我的标签库中,我有

def contentArea = {attrs, body ->           
def domainObject = Class.forName("${attrs.contentType}", true, Thread.currentThread().contextClassLoader).newInstance()
def numberOfRows = !StringUtils.equals("${attrs.max}", "null")? new Integer("${attrs.max}") : new Integer("1");
def results = domainObject.getByContentAreaKey("${attrs.contentAreaKey}", numberOfRows)
out << g.render(
template: '/layouts/contentTag',
model: [contentAreaKey: attrs.contentAreaKey, results : results, contentNamespace: "${attrs.contentAreaKey}" + "_contentList", body:body()])
out << body()
}

在 _contentTag.gsp 中,布局为:
<b>In tag layout, </b>
<g:set var="${contentNamespace}" value="bobby"/>
contentNamespace = ${contentNamespace}<br/><!-- prints "minicontent_contentList" -->
minicontent_contentList = ${minicontent_contentList}<br/> <!-- prints "bobby" -->

并且在调用 gsp 中,标签被调用:
<mynamespace:contentArea var="myVar" contentAreaKey="minicontent" contentType="com.my.test.MiniContentType">
<br/>Test Text<br/>
<b>in calling GSP,</b>
contentNamespace = ${contentNamespace}<br/><!-- prints nothing -->
minicontent_contentList = ${minicontent_contentList}<br/><!-- prints nothing -->
</mynamespace:contentArea>

contentNamespace 和 minicontent_contentList 未在标记正文中解析。是否有可能解决变量?如果是这样,我该怎么做?

如果它对答案有帮助,我有一个包含许多小内容区域的页面,我希望能够通过不同的 Controller 进行管理。内容区域背后都有相似的数据(文本、链接、图形等),但布局会有所不同。我使用了站点网格布局来屏蔽页面,调用 gsp 代表这些站点网格内容 block 之一。

我对 grails 和寻求 SO 帮助非常陌生,所以我非常愿意接受批评,但请保持温和。 :)

最佳答案

body ,作为传入的参数,是 Closure ,它将把它的方法和参数解析到它被声明的位置,这里将是主要的 gsp。您可以尝试设置 delegatebody到标签库并设置resolveStrategyClosure.DELEGATE_FIRST .这应该允许您解决 contentNamespace .

def contentArea = {attrs, body ->
...
def contentNamespace = "${attrs.contentAreaKey}" + "_contentList"
out << g.render(
...
body.delegate = this
body.resolveStrategy = Closure.DELEGATE_FIRST
out << body()
}

解决 minicontent_contentlist会更难,因为我不确定如何将模板指定为委托(delegate)。您可以尝试在标签库中定义变量并将其传递给模板模型,然后分配 minicontent_contentlist传递的对象的值,这可能会在标签库代码中更新 resolveStrategy 的值工作,假设它是通过引用传递的同一个对象。
def contentArea = {attrs, body ->
...
def minicontent_contentList
out << g.render( ..., model:[minicontent_contentList:minicontent_contentList])
...delegate and resolveStrategy stuff...
}

<b>In tag layout, </b>
<g:set var="minicontent_contentlist" value="bobby"/>
contentNamespace = ${contentNamespace}<br/><!-- prints "minicontent_contentList" -->
minicontent_contentList = ${minicontent_contentList}<br/> <!-- prints "bobby" -->

作为最后一个选项,您可以尝试分配 delegate/resolveStrategy在模板中的 gsp curlies ( ${} ) 中查看是否将模板对象分配给 delegate范围。

关于Grails 标记不解析其主体中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668044/

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