【问题标题】:Play 2.2.1: ambiguous implicit values for object PlayMagicForJavaPlay 2.2.1:对象 PlayMagicForJava 的模糊隐含值
【发布时间】:2014-04-12 07:36:40
【问题描述】:

我运行 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 模板时,我还将 request 声明为隐含在 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]                               ^

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

【问题讨论】:

  • 你解决了这个问题吗?我的项目也有同样的情况。
  • 不,我使用了一种解决方法。我明确地传递了 RequestHeader。

标签: java scala playframework playframework-2.0


【解决方案1】:

在遇到同样的问题后,我偶然发现了一个解决方案。适合我的解决方案是我在 Play Framework 2.3.x 和 Scala 2.11.1 上。

只需在模板中的任何地方使用 play.api.mvc.Request:

@()(implicit request: play.api.mvc.Request[Any])

【讨论】:

    【解决方案2】:

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

    def myAction() = Action { implicit request =>
        Ok(someView())
    }
    

    所以默认情况下,如果你没有在你的视图参数中指定隐式,即

    改变

    @()(implicit request: play.api.mvc.RequestHeader)
    

    @()
    

    您应该仍然可以在您的视图中显式访问 RequestHeader。那么你就需要调用:

    @mainEmptyScala("blah", head) {}(request)
    

    我还没有测试过这个,但我应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多