这是我的观点代码:
@(title:String)(conten:Html)(implicit lang:Lang, flash:Flash)
<html>
<head>
<title>.: @title :.</title>
</head>
<body>
...
@flash.get("message").getOrElse("Welcome ;)")
...
</body>
</html>
但是当我尝试这个时,在我的控制器中:
def main = Action { implicit req =>
Ok(views.html.main("First Page"))
}
我收到此错误:
could not find implicit value for parameter flash: play.api.mvc.Flash
如果我理解了correclty,在这种情况下,“request2flash”方法(来自Controller)必须创建一个隐含的flash值......但为什么它不起作用?
在另一种情况下,当我尝试这个时:
def main = Action { implicit req =>
implicit val flash = req.flash
Ok(views.html.main("First Page"))
}
我收到此错误:
ambiguous implicit values:
both method request2flash in trait Controller of type (implicit request: play.api.mvc.RequestHeader)play.api.mvc.Flash
and value flash of type play.api.mvc.Flash
match expected type play.api.mvc.Flash
我正在使用带有Scala 2.11.1和Play 2.3.3的Typesafe Activator(1.2.8)。
请原谅我。我有2个具有相似路径的对象,其中一个对请求参数没有“隐式”定义。我在4小时后释放了它。谢谢大家。
答案 0 :(得分:0)
我无法使用Scala 2.11.2和Play 2.3.3重现您的问题。以下代码为我编译,表明implicits正在运行:
object App extends Controller {
def flashy = Action { implicit req =>
val flash = implicitly[Flash]
Ok("")
}
有一种方法可以让您的代码进行编译。 Implicits只是第二个参数列表,因此您可以明确地提供它们:
def main = Action { req =>
Ok(views.html.main("First Page")(request2lang(req), request2flash(req)))
}
当然,这不能替代找到并解决问题的原因!
更新:
我刚刚注意到您正在呼叫views.html.main
而不是views.html.index
。这不会编译,因为views.html.main
有一个额外的参数列表(content: Html)
。这无疑是你问题的原因。