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._");