【问题标题】:Could not find implicit value for parameter flash找不到参数 flash 的隐式值
【发布时间】:2011-10-17 01:12:14
【问题描述】:

我正在尝试将一些代码从 Play Framework Java 移植到 Play Framework Scala,但在移植标签时遇到了一些问题。

Java 版本中的相关标签检查 Flash 范围的内容并根据其值(错误、成功等)向用户创建通知。

我尝试创建一个 Scala 视图 (flag.scala.html):

@()(implicit flash:play.mvc.Scope.Flash)

@if(flash.get("error")) {
    <p style="color:#c00">
        @flash.get("error")
    </p>
}

我从main.scala.html 打来电话:

@views.Application.html.flag()

我得到的错误是:

文件 {module:.}/tmp/generated/views.html.main.scala 不能 编译。引发的错误是:找不到隐含值 参数flash:play.mvc.Scope.Flash

对新标签的调用是正确的,就好像我用浏览器中显示的某个字符串替换了内容一样。

我确定这很愚蠢,但我被卡住了。有什么建议吗?

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    我不知道 Play 的详细信息,但这个编译错误是说你应该:

    1. 在对flag()的调用中传递play.mvc.Scope.Flash的显式实例,

      views.Application.html.flag()(myFlash)
      

    2. 使Flash 的隐式实例在调用flag() 的范围内可用。您可以通过导入某个对象 (import some.path.FlashImplicits._) 的内容或自己定义隐式实例来做到这一点,

      implicit val myFlash: play.mvc.Scope.Flash = ...
      ...
      views.Application.html.flag()
      

    所以真正的问题变成了:你想从哪里得到这个Flash 实例?

    【讨论】:

    • 是的,第二个修复与 Play 完美配合:@()(implicit flash:play.mvc.Scope.Flash = play.mvc.Scope.Flash.current()) 的标签声明变量。谢谢一百万先生!
    • 看起来你选择了选项#3:给隐式参数一个默认值。这也有效。请注意,您实际上并不需要在此处将其设为“隐式”,但这并没有什么坏处。乐于助人。
    【解决方案2】:

    您不应自行创建“隐式闪存:Flash”的实现。只需在您的操作中添加“隐式请求”即可。

    更多详情在页面末尾:https://github.com/playframework/Play20/wiki/ScalaSessionFlash

    【讨论】:

    • 我添加了隐式请求,但它不起作用..当我尝试使用隐式闪存时,它也不起作用..玩起来很麻烦,尤其是每个次要版本都有变化跨度>
    【解决方案3】:

    Ivan 提出了正确的建议,添加了“隐式请求”。但是,他的链接似乎已过时。如果您想要更明确的解释,请在此处查看我对类似问题的回答:

    How to pass flash data from controller to view with Play! framework

    【讨论】:

      【解决方案4】:

      我有同样的问题,但查看文档我发现以下内容:

      如果错误“找不到参数 flash 的隐含值”: play.api.mvc.Flash' 被提出然后这是因为你的动作没有 导入请求对象。添加“隐式请求=>”

      当然,如果您有如下嵌套视图,则隐式 Flash 必须出现在每个视图中:

      @(implicit flash: Flash){
      
      @main(){<h1>hello</h1>}
      
      }
      

      此视图不使用 flash 作用域,但如果 main 使用它,则应在使用 main 的视图中声明,因为编译器会报错。

      来源:http://www.playframework.com/documentation/2.1.1/ScalaSessionFlash

      【讨论】:

        猜你喜欢
        • 2013-09-04
        • 2017-02-02
        • 2016-01-17
        • 2016-03-31
        • 2015-01-27
        • 1970-01-01
        • 2016-02-27
        • 2016-02-22
        • 2011-04-15
        相关资源
        最近更新 更多