I'm trying to port some code from Play Framework Java to Play Framework Scala but I'm having some issues with porting a tag.
The tag in question in the Java version checks the contents of the Flash scope and creates notifications to the user according to its values (error, success, etc).
I tried to create a Scala view (flag.scala.html
):
@()(implicit flash:play.mvc.Scope.Flash)
@if(flash.get("error")) {
<p style="color:#c00">
@flash.get("error")
</p>
}
Which I call from main.scala.html
via:
@views.Application.html.flag()
The error I get is:
The file {module:.}/tmp/generated/views.html.main.scala could not be compiled. Error raised is : could not find implicit value for parameter flash: play.mvc.Scope.Flash
The call to the new tag is correct, as if I replace the content by some String that's shown in the browser.
I'm sure it's something stupid but I got stuck. Any suggestion?
I don't know the details of Play, but this compile error is saying you should either:
Pass an explicit instance of play.mvc.Scope.Flash
in the call to flag()
,
views.Application.html.flag()(myFlash)
or
Make an implicit instance of Flash
available in the scope where flag()
is called. You could do this by importing the contents of some object (import some.path.FlashImplicits._
) or by defining the implicit instance yourself,
implicit val myFlash: play.mvc.Scope.Flash = ...
...
views.Application.html.flag()
So the real question becomes: where do you want to get this Flash
instance from?
You should not create an implementation for "implicit flash : Flash" on your own. Just add a "implicit request" to your action and it should work.
More details is here at the end of the page: https://github.com/playframework/Play20/wiki/ScalaSessionFlash
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With