【问题标题】:@session.get not working in scala html template@session.get 在 scala html 模板中不起作用
【发布时间】:2018-03-20 14:08:46
【问题描述】:

我的@session.get("id") 在下面没有工作。登录系统后,我在控制器中使用 .withSession("id" -> id) 设置会话值 id。有没有办法让这个 session.get 工作?

ma​​in.scala.html

@(标题:字符串)(内容:Html)

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" cantent="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimun-scale=1.0, user-scalable=no" />
    <title>@title</title>

</head>

<body>
  <div class="main container">
    <div class="navigation container">
      <div class="logo container">
        <div class="user">@session.get("id")</div>
        <div class="separator"></div>
    </div>
    <div class="separator"></div>
    <ul>
      <li class="user"><a href="@routes.AdmnTask.user()">USER</a></li>
      <li class="code"><a href="@routes.AdmnTask.code_list()">CODE</a></li>
           </ul>
  </div>
  <div class="header container">
    <div class="left"></div>
    <a class="right" href="#all-menu"></a>
  </div>
  <div id="mainnav" class="mainnav">
        @content
  </div>
</div>
</body>

未找到此原因:值会话错误。即使添加后也没有发现同样的问题

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

这是我的 index.scala.html,它成为我模板的基本结构。

@*
 * This template takes a single argument, a String containing a
 * message to display.
 *@
@(message: String)

@*
 * Call the `main` template with two arguments. The first
 * argument is a `String` with the title of the page, the second
 * argument is an `Html` object containing the body of the page.
 *@
@main("Welcome") {

    @*
     * Get an `Html` object by calling the built-in Play welcome
     * template and passing a `String` message.
     *@
    @message

}

请帮忙!

【问题讨论】:

  • 可以将(implicit request: Request[_])传递给模板,然后可以使用request.session
  • 你的意思是我应该在 main.scala.html 的 @(title: String)(content: Html) 旁边添加 (implicit request: Request[_]) ?并使用@request.session.get("id")?
  • 在所有其他 @content 页面中导致 Cannot find any HTTP Request here 错误
  • Action 中,您可以提供隐式请求,例如Action { implicit req =&gt; ??? }
  • 我的控制器中已经有= Action { implicit request: MessagesRequest[AnyContent] =&gt;

标签: scala playframework-2.6


【解决方案1】:

您需要将会话显式传递给您的模板:

vies.htlm.index(message,session) 来自您的操作。然后进一步将此会话传递给您的 main.scala.html。

并且在 index.scala.html 中,从 session 参数中移除隐式。

或者,在你的 index.scala.html 和你的 main.scala.html 中传递 (implicit request: Request[T])。

@(message: String)(implicit request: Request[T]) -> index
@(title: String)(content: Html)(implicit request: Request[T]) -> main

您可以像这样访问会话:

request.session.get("key")

这将是必要的。

【讨论】:

  • 在您的情况下使用 -> 隐式请求:MessagesRequest[AnyContent]
  • 您在调用 index.html 的操作中有此隐式请求。只需将其添加到您的模板[index 和 main] 中即可:(隐式请求:MessagesRequest[AnyContent])
  • 假设您正在从您的操作中调用 index.scala.html: Action { 隐式请求:MessagesRequest[AnyContent] =>Ok(views.scala.html("some message"))},现在,把它放在你的 index.scala.html -> @(message: String)(implicit request: MessagesRequest[AnyContent]) 中。由于您必须访问 main.scala.html 中的会话,因此请将其放入您的 main.scala.html -> @(title: String)(content: Html)(implicit request: MessagesRequest[AnyContent])
  • 如果您在模板中使用请求,则在调用模板时无需传递会话
  • 好的,然后将这个 -> @(message: String)(implicit request: MessagesRequest[AnyContent]) 添加到你的 team.scala.html。并且由于您需要访问 main.scala.html 中的会话,因此您还需要在 main.scala.html 中添加 (implicit request: MessagesRequest[AnyContent])。
猜你喜欢
  • 1970-01-01
  • 2021-03-07
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多