2015-01-06 87 views
2

我嘗試在一個控制器中創建新會話並設置變量,並將該變量從會話變爲另一個動作。但會話返回空值。我使用Grails 2.3.7。會話變量在Grails中不起作用

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 
    } 
} 

回答

2

更改您的代碼爲:

class AuthorizationController { 

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

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

您不必創建一個新的會話,你可以直接使用session變量提供給控制器。此外,您不必使用獲取者&設置器在會話中獲取&設置值。你可以直接使用它們,正如我在上面的代碼中提到的那樣。

如果您使用grails> 2.x,請避免在定義控制器操作時使用閉包。改用普通方法類型。

+0

您的代碼無法使用。但我嘗試使用setter和getters的可用會話。是工作。 – user3387291

+0

哦,對不起。我的錯。我在回答中使用了== ==而不是'='。我修好了它。一探究竟。這也會起作用。 –

+0

謝謝。其工作如果在重定向中使用括號。像這樣:'redirect(action:logout())' – user3387291