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

coo*_*ler 5 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)
Run Code Online (Sandbox Code Playgroud)

它打来电话

@mainEmptyScala("blah", head) {}
Run Code Online (Sandbox Code Playgroud)

mainEmptyScala.scala.html的参数列表:

@(title: String, head: Html = Html(""))(body: Html)(implicit request: play.api.mvc.RequestHeader)
Run Code Online (Sandbox Code Playgroud)

当我调用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]                               ^
Run Code Online (Sandbox Code Playgroud)

我确保任何Java控制器都不会调用indexScala和mainEmptyScala模板,因此不应使用PlayMagicForJava.有谁知道如何解决这个编译错误?谢谢.

Roy*_*Lin 0

在你的控制器中,我假设你有这样的东西:

def myAction() = Action { implicit request =>
    Ok(someView())
}
Run Code Online (Sandbox Code Playgroud)

因此,默认情况下,如果您没有在视图参数中指定隐式,即

改变

@()(implicit request: play.api.mvc.RequestHeader)
Run Code Online (Sandbox Code Playgroud)

@()
Run Code Online (Sandbox Code Playgroud)

您应该仍然能够显式访问视图中的 RequestHeader。那么你需要调用:

@mainEmptyScala("blah", head) {}(request)
Run Code Online (Sandbox Code Playgroud)

我还没有测试过这个,但我这应该有用