我想知道如何知道何时使用表达式$ {}传递属性值,而不是。
例如,在下一个标记调用中,为什么{$ 1}}和template
属性值在没有$ {}的情况下传递,但model
属性值与$ {}一起传递。
collection
我想学习如何阅读本主题中的grails标签文档。
答案 0 :(得分:2)
${}
仅用于需要评估的表达式,而不用于字符串文字。
<g:render template="displaybook" model="['book':book,'author':author]" collection="${books}" />
&#34; displaybook&#34;是一个文字字符串,而不是变量引用,因此将它放在${}
中是没有意义的。
&#34;书籍&#34;是一个变量引用,所以将它放在${}
。
传递像['book':book,'author':author]
这样的文字集合时会有特殊处理。解析器将识别周围的[...]
,并将内容评估为表达式,而不是字符串文字,因此${}
不是必需的。
我希望有所帮助。
答案 1 :(得分:1)
请参阅,如果如上面的答案所述,您使用$ {}来评估某些内容,例如:“$ {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");
这只是一种非常简单的创建地图的方法,没有所有的投射工作和东西(这是groovy非常酷的原因之一)。
您也可以这样做:
def map = [:]
public void getObject(key){
if(map."${key}")
println(map."${key}") //this will print the object not the key, getObject("mobile") would print cellphone not "mobile" understand? That's awsome!
}
这意味着您可以使用变量= D的运行时密钥。
希望我帮助