Play 2.2.1:对象PlayMagicForJava的模糊隐含值

时间:2014-03-09 06:31:19

标签: java scala playframework playframework-2.0

我运行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。有谁知道如何解决这个编译错误?感谢。

2 个答案:

答案 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)

我还没有对此进行测试,但我应该这样做