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