PlayFramework2如何在视图模板中获取当前页面的URL

ses*_*ses 7 scala playframework-2.0

最初发布并在这里回答:

https://groups.google.com/forum/#!topic/play-framework/s-ufMIbLz3c

但是当我把:

<div>
 @if (request.uri == "/") { "Home Menu Selected" }
</div>
Run Code Online (Sandbox Code Playgroud)

但我得到了:

'(' expected but ')' found.
Run Code Online (Sandbox Code Playgroud)

Kar*_*arl 8

假设你在范围内有请求对象,遗憾的是你只需要在"if"之后删除空格.播放模板对间距非常敏感.尝试:

<div>
 @if(request.uri == "/") { "Home Menu Selected" }
</div>
Run Code Online (Sandbox Code Playgroud)


i.a*_*iel 7

你想要实现的是很常见的,你试图通过将其标记为活动来显示菜单中的当前页面.

解决方案1

你确实可以做你上面做的事情.在模板中添加几个带字符串比较的@if条件.

@if(request.uri == "/"){ class="active" }
Run Code Online (Sandbox Code Playgroud)

解决方案2

但我喜欢在类型安全架构中更进一步.我通常创建一个包含很多常量的对象:

object MenuContants {
    val HOME = "HOME"
    val CONTACT = "CONTACT"
}
Run Code Online (Sandbox Code Playgroud)

然后我在模板中给出这些常量.从子模板到主布局模板:

@main("The title of my page", MenuConstants.HOME) {
    // the rest of my template
}
Run Code Online (Sandbox Code Playgroud)

然后在主模板中进行比较,但不再基于字符串,而是基于常量,这是类型安全的.

@(title:String, contant:String) {
    @if(contant == MenuConstants.HOME) { class="active" }
}
Run Code Online (Sandbox Code Playgroud)