【发布时间】:2015-06-16 20:12:00
【问题描述】:
注意“flash not found in Products.scala”中描述的问题不一样,已经解决了。
“Play for Scala”一书中的第 2 章演练包括一个“editProduct.scala.html”,内容如下:
@(productForm: Form[Product]) (implicit flash:Flash, lang:Lang)
@import helper.twitterBootstrap._
@main(Messages("products.form")){
...
}
}
Play 2.3.8 编译器出错:
Error:(4, 33) Play 2 Compiler:
.../editProduct.scala.html:4: could not find implicit value for parameter flash: play.api.mvc.Flash
@main(Messages("products.form")){
^
我将此解释为,出于某种原因,第一行的“flash”对于调用第 4 行的“main”模板并不令人满意。“main”模板以:
@(title: String)(content: Html)(implicit flash: Flash, lang: Lang)
我认为这无关紧要,但调用此表单的控制器代码如下:
import play.api.mvc._
import models.Product
import play.api.data.Form
import play.api.data.Forms.{mapping,longNumber,nonEmptyText}
import play.api.i18n.Messages
object Products extends Controller {
...
def newProduct = Action { implicit request =>
val form = if (request.flash.get("error").isDefined)
productForm.bind(request.flash.data)
else
productForm
Ok(views.html.products.editProduct(form))
}
...
}
任何人都可以建议任何尝试吗?这本书基于 Play Framework 2.1,而我使用的是 2.3.8,因此可能存在某种版本依赖性——但我在 SO 或支持该理论的文档中找不到任何内容。
【问题讨论】:
-
@cchantep - 是的,我也看到了,确实有这个问题并修复了它 - 请注意控制器代码中的“request.flash”。但是,我无法弄清楚这个问题将如何映射到手头的问题上。你有什么具体的建议吗?为了它的价值,我尝试在控制器中添加行
implicit val flash = request.flash,但没有效果。