在Grails框架中何时在标记属性值中使用表达式${}?

在Grails框架中何时在标记属性值中使用表达式${}?,grails,groovy,Grails,Groovy,我想知道如何知道何时使用表达式${}传递属性值,以及在何处不传递 例如,在下一个标记调用中,为什么template和model属性值不带${}传递,而collection属性值带${}传递 我想学习如何阅读本主题中的grails标记文档。仅将${}用于需要计算的表达式,而不是字符串文本 <g:render template="displaybook" model="['book':book,'author':author]" collection="${books}" />

我想知道如何知道何时使用表达式${}传递属性值,以及在何处不传递

例如,在下一个标记调用中,为什么
template
model
属性值不带${}传递,而
collection
属性值带${}传递


我想学习如何阅读本主题中的grails标记文档。

仅将
${}
用于需要计算的表达式,而不是字符串文本

<g:render template="displaybook" model="['book':book,'author':author]" collection="${books}" />

“displaybook”是一个文本字符串,而不是一个变量引用,因此将其放在
${}
中没有意义

“books”是一个变量引用,因此将其放在
${}
中是有意义的

当传递像
['book':book,'author':author]
这样的文本集合时,会有特殊的处理。解析器将识别周围的
[…]
并将内容作为表达式而不是字符串文本进行计算,因此那里不需要
${}


我希望这会有所帮助。

这个
${}
只用于需要计算的表达式,而不是字符串文本

<g:render template="displaybook" model="['book':book,'author':author]" collection="${books}" />

“displaybook”是一个文本字符串,而不是一个变量引用,因此将其放在
${}
中没有意义

“books”是一个变量引用,因此将其放在
${}
中是有意义的

当传递像
['book':book,'author':author]
这样的文本集合时,会有特殊的处理。解析器将识别周围的
[…]
并将内容作为表达式而不是字符串文本进行计算,因此那里不需要
${}


我希望这会有所帮助。

看,如果像上面的答案所说的那样,您使用${}来评估某个东西,例如:“${book.author.name.toString()}”,将返回“Stephen King”,但是如果您像这样放置“book.author.name.toString()”,结果将是“book.author.name.toString()”。此外,符号[something:4,otherSomething:“what up”]在java中与此相同:

LinkedTreeMap<String,Object> map = new LinkedTreeMap<String,Object>();
map.put("something",4);
map.put("otherSomething","whats up");
这意味着您可以使用variables=D中的运行时键


这就是我希望帮助的

看到,如果像上面的答案所说的那样,你使用${}来评估某个东西,例如:“${book.author.name.toString()}”,将返回“Stephen King”,但是如果你像这样放置“book.author.name.toString()”,那么结果就是“book.author.name.toString()”。此外,符号[something:4,otherSomething:“what up”]在java中与此相同:

LinkedTreeMap<String,Object> map = new LinkedTreeMap<String,Object>();
map.put("something",4);
map.put("otherSomething","whats up");
这意味着您可以使用variables=D中的运行时键

就是这样希望我能帮上忙