我运行Play Framework 2.2.1。我曾经只有java控制器渲染模板。现在我添加一个Scala控制器来呈现一个新模板indexScala.scala.html。 indexScala.scala.html的参数列表:
@()(implicit request: play.api.mvc.RequestHeader)
然后调用
@mainEmptyScala("blah", head) {}
mainEmptyScala.scala.html的参数列表:
@(title: String, head: Html = Html(""))(body: Html)(implicit request: play.api.mvc.RequestHeader)
当我调用indexScala模板时,我还将请求声明为Scala控制器中的隐式。但是,我收到了这个编译错误。
[error] ~/myapp/app/views/indexScala.scala.html:29: ambiguous implicit values:
[error] both method requestHeader in object PlayMagicForJava of type => play.api.mvc.RequestHeader
[error] and value request of type play.api.mvc.RequestHeader
[error] match expected type play.api.mvc.RequestHeader
[error] @mainEmptyScala("blah", head) {
[error] ^
我确保任何Java控制器都不会调用indexScala和mainEmptyScala模板,因此不应使用PlayMagicForJava。有谁知道如何解决这个编译错误?感谢。
答案 0 :(得分:1)
遇到同样的问题后,我偶然发现了一个解决方案。适用于我的解决方案,我使用Scala 2.11.1在Play Framework 2.3.x上。
只需在模板中的任何地方使用play.api.mvc.Request:
@()(implicit request: play.api.mvc.Request[Any])
答案 1 :(得分:0)
在你的控制器中,我假设你有这样的东西:
def myAction() = Action { implicit request =>
Ok(someView())
}
因此,默认情况下,如果您未在视图参数中指定隐式,即
更改
@()(implicit request: play.api.mvc.RequestHeader)
要
@()
您仍然可以显式访问视图中的RequestHeader。那么你需要打电话:
@mainEmptyScala("blah", head) {}(request)
我还没有对此进行测试,但我应该这样做