2014-04-30 80 views
-1

我用playframework2.2爲什麼我的會話值只會在刷新頁面後才顯示我還在playframework2中創建會話?

我在行動的一個寫會話:

def index = Action {implicit rs => 
var newsession 
if(currentUser.isDefined){ 
    val currentUser=SecureSocial.currentUser.get 
newsession= rs.session + ("user" -> currentUser.fullName) 
}else{ 
newsession=rs.session 
} 

Ok(views.html.list_subject("Hello from Scala", sublist.run(DB.createSession()))).withSession(newsession) 
} 

我list_subject頁我用另一個模板主:

@main(message) { 
..... 
} 
在main.scala.html

我使用新的會話:

@(title: String)(content: Html)(implicit request: RequestHeader) 
.... 
.... 
     <ul class="nav navbar-nav navbar-right"> 
      @if(request.session.get("user").isDefined){ 
      .... 
      }else { 
       <li><a href="@securesocial.controllers.routes.LoginPage.login()">Login</a></li> 
      } 

     </ul> 

我發現新會話只在第二次,我的意思是當我已經登錄鏈接登錄不會改變,只有當我刷新它然後它改變。 我也通過螢火蟲檢查會議,只有在第二次會議將通過請求後才能找到。我想知道如何使會話第一次更改(不需要刷新頁面)。

回答

0

withSession將設置一個cookie,它將在以下請求中提供新會話,但不會修改當前的RequestHeader對象。您的視圖無權訪問控制器中所做的更改。您應該修改視圖,以便將用戶作爲參數,而不是傳遞整個RequestHeader

0

我覺得因爲你使用Ok

使用cookie創建後需要

Redirect(path).withSession(newsession)//path is variable contaning the string to redirect 

重定向新會話只是第二次

後工作。然後在瀏覽器中檢測到,因此您必須重定向。

Ok,在同一頁顯示您的不同頁面

相關問題