grails / groovy braces语法问题

时间:2011-08-02 05:06:28

标签: grails groovy

我正在使用一个例子,我无法理解大括号的作用 - 下面第二个“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"}}]"""
     }
   }
}

非常感谢

3 个答案:

答案 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)

我无法获得如下所示的输出

Hello John Doe [Logout]

这是我得到的输出

  

你好jdoe [Logout