【问题标题】:Session variables not working in Grails会话变量在 Grails 中不起作用
【发布时间】:2015-12-25 22:48:22
【问题描述】:

我尝试在一个控制器中创建新会话并设置变量并将此变量从会话获取到另一个操作。但会话返回空值。我使用 Grails 2.3.7。

class AuthorizationController {

    def signIn = {

       def session = request.getSession(true)
       session.setAttribute('username', 'zzzz')
       println(session.getAttribute('username')) // <-- here work
       redirect(action: logout)
    }

    def logout = {
        println(session.getAttribute('username')) // <-- here not work
    }
}

【问题讨论】:

标签: session grails


【解决方案1】:

将代码更改为:

class AuthorizationController {

    def signIn() {
       session.username = 'zzzz'
       println(session.username)
       redirect(action: 'logout')
    }

    def logout() {
        println(session.username)
    }
}

您不必创建新会话,可以直接使用控制器可用的session 变量。此外,您不必在会话中使用 getter 和 setter 来获取和设置值。您可以直接使用它们,就像我在上面的代码中提到的那样。

如果您使用的是 grails > 2.x,请避免在定义控制器操作时使用闭包。请改用普通方法类型。

【讨论】:

  • 您的代码不起作用。但我尝试使用带有 setter 和 getter 的可用会话。这是工作。
  • 哦,对不起。我的错。我在回答中使用了== 而不是=。我修好了它。一探究竟。这也可以。
  • 谢谢。如果在重定向中使用括号,它的工作。像这样:redirect(action: logout())
  • 您在上面指定的语法可能有效但不正确。使用redirect(action: 'logout')。它的正确语法。实际上,我从您的答案中复制粘贴。您提供的语法是调用 logout() 方法,但 action 参数必须包含要以字符串格式重定向的操作的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 2015-09-30
  • 2013-04-12
  • 2012-08-17
  • 2014-05-16
相关资源
最近更新 更多