Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 播放2.0访问模板中的请求_Templates_Session_Playframework 2.0 - Fatal编程技术网

Templates 播放2.0访问模板中的请求

Templates 播放2.0访问模板中的请求,templates,session,playframework-2.0,Templates,Session,Playframework 2.0,我有以下简化的模板设置: 主(模板) 主页 细节 现在,当用户登录时,会设置会话属性username,这样我就可以确定用户是否登录。为了帮助我确定用户是否登录,我有以下会话帮助对象: object SessionHelper { val sessionKey = "username" def authenticated(implicit request: RequestHeader) = { request.session.get(sessionKey).exists(

我有以下简化的模板设置:

  • 主(模板)
    • 主页
    • 细节
现在,当用户登录时,会设置会话属性
username
,这样我就可以确定用户是否登录。为了帮助我确定用户是否登录,我有以下会话帮助对象:

object SessionHelper {
  val sessionKey = "username"

  def authenticated(implicit request: RequestHeader) = {
    request.session.get(sessionKey).exists(_ => true)
  }
}
我可以在采用
隐式
请求对象的模板中使用它,例如:

(implicit request: play.api.mvc.RequestHeader)
...
@if(SessionHelper.authenticated) {
    <strong>Authenticated!</strong>
}
...
def index = Action { implicit request =>
  Ok(views.html.index(myStuff))
}
如果没有
隐式请求=>
语句,它将无法编译。现在,虽然这有点尴尬,但只要我停留在任何“子视图”(例如主页或详细信息)中,这就可以了,因为对于这些视图中的每一个,我都有一个控制器方法,因此也可以访问隐式的
RequestHeader
实例。但是,当我需要访问模板(例如Main)中的会话时,这不起作用,因为控制器从未显式呈现该会话

我并没有立即看到一种在模板中访问会话的方法,而快速的谷歌搜索只会显示关于同一主题的几个问题,没有解决方案。有什么想法吗


更新:似乎与此有关。

除了在所有模板中传递隐式请求之外,没有其他选择,至少在Play Framework 2.0中是这样


您在更新中添加的链接是仅在一个对象中移动模板周围的更多数据,但您仍然需要到处声明隐式参数。

我注意到一件有趣的事情:在我的Java Play 2.1.0应用程序中,我可以使用中列出的隐式对象,而在Play 2中它们根本没有文档记录!可能这是类似于未记录的向后兼容性修复程序。无论如何,我可以做到:

<li @if(request.uri == routes.Help.index.url){class="active"}>

这是:

@for( (key, message) <- flash) { ... }

@for((键,消息)如果使用Play for Java,可以执行以下操作:

<li @if(requestHeader.uri == routes.Help.index.url){class="active"}>

在Play 2.3.x中,我得到了“未找到:值请求”。@扳手:看看卡卡的答案,他给出了一个解释。简言之:你可以得到一些隐式的。深入研究这个类
javaImports.add("play.core.j.PlayMagicForJava._");