【问题标题】:Can I call session in template/view on Play Framework我可以在 Play Framework 的模板/视图中调用会话吗
【发布时间】:2012-06-08 22:41:24
【问题描述】:

我刚开始使用 Play Framework 2.0(我正在使用 Scala)并且对会话有疑问。

我来自 Ruby on Rails 背景,所以我倾向于考虑我在 Play Framework 中学到的所有与 Ruby on Rails 相关的内容。

考虑到这一点,有什么方法可以让我在视图中调用存储在 Session 中的内容?

如果我在 Session 中存储了“hello”->“world”,我希望能够执行 @session.get("hello") 之类的操作并能够在视图中使用“world”。这可能吗?

我看到的另一个选项是将值存储在控制器中的变量中,然后通过执行 OK(var) 之类的操作将其传递给视图,但这种方式似乎有点笨拙,尤其是当我开始使用更多变量时.

谢谢!

【问题讨论】:

    标签: scala playframework playframework-2.0


    【解决方案1】:

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

    【讨论】:

    • 我尝试此方法时会话似乎不在范围内?
    • 查看其他答案了解更多详情。
    【解决方案2】:

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

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

    还有flash 范围——它与session 的不同之处在于它只存在于一个请求并且没有签名。因此,它最常用于传输错误/inf 消息。

    请参阅Session and flash 范围文档

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

    【讨论】:

    • 我尝试将“(隐式会话:play.api.mvc.Session)”放在模板开头的 @() 旁边,我在其中传递参数,但是当我尝试调用 @会话我得到一个错误,未找到:值会话
    • 当我尝试添加 @(implicit session: play.api.mvc.Session) 时,我得到一个不同的错误:'=>' expected but ')' found
    • 您之前是否在任何控制器中设置了一些会话?检查域的 cookie,它们存储在那里。
    • 似乎当我将“(隐式会话:play.api.mvc.Session)”放在参数旁边时,它只是作为 HTML 纯文本显示在我的页面上。我如何让 play 读懂它应该是什么?
    【解决方案3】:

    您可以在播放模板中明确调用ur session。

    试试这个代码 - 它在视图中工作:

    $session.session_variable_name;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2021-01-07
      • 2014-01-19
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多