找不到参数flash的隐含值

时间:2011-07-31 20:19:39

标签: scala playframework

我正在尝试将一些代码从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

对新标记的调用是正确的,就像我用浏览器中显示的某些String替换内容一样。

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

4 个答案:

答案 0 :(得分:5)

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

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

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

  2. 在调用Flash的范围内创建flag()的隐式实例。您可以通过导入某个对象(import some.path.FlashImplicits._)的内容或自己定义隐式实例来完成此操作,

    implicit val myFlash: play.mvc.Scope.Flash = ...
    ...
    views.Application.html.flag()
    
  3. 所以真正的问题就变成了:你想从哪里获得这个Flash实例?

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

  

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

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

@(implicit flash: Flash){

@main(){<h1>hello</h1>}

}

此视图不使用flash范围,但如果main使用它,则应使用main在视图中声明,因为编译器会抱怨。

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