2014-04-30 44 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,在同一页显示您的不同页面

相关问题