我可以在Play Framework上的模板/视图中调用会话吗?

时间:2012-06-04 21:09:29

标签: scala playframework playframework-2.0

我是使用Play Framework 2.0的新手(我正在使用Scala)并对会话有疑问。

我来自Ruby on Rails背景,因此我倾向于考虑我在Play Framework中学习的关于Ruby on Rails的所有内容。

考虑到这一点,当我在视图中时,有没有办法让我调用存储在Session中的东西?

如果我有“你好” - >存储在Session中的“world”,我希望能够像@ session.get(“hello”)那样做,并且能够在视图中使用“world”。这可能吗?

我看到的另一个选项是将值存储在控制器中的变量中,并通过执行类似OK(var)的操作将其传递给视图,但这种方式似乎有点笨重,特别是如果我开始使用更多变量

谢谢!

3 个答案:

答案 0 :(得分:22)

Play中的会话存储在Cookie中,实际上仅用于交叉请求数据。如果这是您想要的,那么您可以使用@session.get("hello"),但实际上您可以实现的是将内容从控制器传递到模板而不必将它们指定为参数的方法。在这种情况下,请在此处查看该问题的非常详细的答案: https://stackoverflow.com/a/9632085/77409

答案 1 :(得分:11)

是的,您可以在模板中使用@session.get("hello"),但是当使用带有Scala控制器的模板时,您看起来需要在模板的开头至少指定名为'session'的隐式参数:

@()(implicit session: play.api.mvc.Session) 

此外还有flash范围 - 它与session的不同之处在于它仅适用于一个请求且未签名。因此,它通常仅用于传输错误/ inf消息。

请参阅Session and flash范围doc

最后,由于每个模板只是一个Scala函数,您还可以从控制器调用一些操作并检索会话数据

答案 2 :(得分:-3)

您可以在播放模板中明确地调用ur会话。

尝试使用此代码 - 它适用于视图:

$session.session_variable_name;