我正在使用一个例子,我无法理解大括号的作用 - 下面第二个“out”语句中“Logout”周围的那些。我猜这个字符串是作为一个闭包传递的,但我没有得到超出该语法的语法。你能澄清一下吗?请注意,代码的输出如下所示:
John Doe [退出]
class LoginTagLib {
def loginControl = {
if(request.getSession(false) && session.user){
out << "Hello ${session.user.login} "
out << """[${link(action:"logout",
controller:"user"){"Logout"}}]"""
} else {
out << """[${link(action:"login",
controller:"user"){"Login"}}]"""
}
}
}
非常感谢
答案 0 :(得分:4)
link
标记采用属性和正文,而作为常规GSP标记,它的调用方式如下:
<g:link action="logout" controller="user">Logout</g:link>
要像你正在做的那样调用它,你需要一种方法来传递文本('Logout')以在链接中呈现。如果你看一下标签的来源(点击http://grails.org/doc/latest/ref/Tags/link.html底部的“显示来源”),你会看到第二个参数是body
,它是一个关闭(虽然这不是从代码,但对于2参数标签来说总是如此)。 {"Logout"}
是一个Closure,返回“Logout”,因为它是最后一个表达式,因此它被用作正文。
答案 1 :(得分:2)
实际上输出应该是
Hello John Doe [Logout]
基本上,如果有会话且用户编写Hello用户并创建指向注销操作的链接,并使用标签Logout。
{“退出”} 是一个等同于 {return“Logout”的闭包;如果没有明确说明,则最后一个语句用作返回值。
答案 2 :(得分:0)