加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在play框架中使用scala和java 2.1:会话使用

发布时间:2020-12-16 18:33:06 所属栏目:安全 来源:网络整理
导读:我目前正在我的模板中使用play框架的session(): @if(session().get("email")==null){ lia href="@controllers.routes.General.login"Login/a/li}else{ lia href="@controllers.routes.General.logout"Logout/a/li} 此模板用于我的所有视图.其中一些视图由Ja
我目前正在我的模板中使用play框架的session():

@if(session().get("email")==null){
    <li><a href="@controllers.routes.General.login">Login</a></li>
}else{
    <li><a href="@controllers.routes.General.logout">Logout</a></li>
}

此模板用于我的所有视图.其中一些视图由Java控制器控制,一些视图由Scala控制器控制.

当我点击导致Java控制器的链接时,我没有问题,正确处理登录和注销的链接.

当我点击导致Scala控制器的链接时,我得到一个[RuntimeException:这里没有可用的HTTP上下文.]

从我在这里读到的关于scala控制器的内容来看,我理解他们在渲染页面时没有返回http上下文,但我真的希望能够在我的模板中使用会话.

我想在我的视图,模板和控制器中使用参数session(),但我相信java会话(play.mvc.http.session)和scala会话(play.api.mvc)之间会发生冲突. session)play时会编译html页面.

我被困了?是否有可能强制scala控制器回放http上下文?

解决方法

根本原因可能是Java控制器和Scala控制器的处理方式不同.
我首先在Java中使用我的项目,然后尝试添加更多Scala控制器.我也遇到过这个问题(BTW,我正在使用Play 2.3.2).

我试图通过使用我自己的ActionBuilder在TheadLocal变量中设置我自己的Http.Context来解决这个问题.

import play.api.mvc._
import scala.concurrent.Future
import play.mvc.Http.Context
import play.core.j.JavaHelpers

object ContextAction extends ActionBuilder[Request] {

  def invokeBlock[A](request: Request[A],block: (Request[A]) => Future[Result]) = {
    Context.current.set(JavaHelpers.createJavaContext(request))
    block(request)
  }
}

然后我的Scala控制器操作只是使用这个ContextAction代替:

class TestController extends Controller {
  def test = ContextAction { implicit request =>
    Ok(views.html.index())
  }
}

这样索引模板就可以访问所有request()/ session()/等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读