scala - 在 Products.scala 中找不到 flash

标签 scala playframework playframework-2.0 playframework-2.3

我目前正在阅读 Peter Hilton 的“Play for Scala”。我刚刚结束了第一个示例 Play 应用程序,您可以在其中构建一个回形针目录。

但是,在编译时,我收到一个编译错误,告诉我尚未找到值“flash”。通常这是我犯的一个简单错误,但鉴于我只是按照书中的指南进行操作,我无法确定修复方法。

错误位于“NewProduct”函数的第 52 行和第 53 行

这是代码:

package controllers

import play.api.mvc.{Action, Controller}
import models.Product
import play.api.data.Form
import play.api.data.Forms.{mapping, longNumber, nonEmptyText}
import play.api.i18n.Messages
import play.api.mvc.Flash

object Products extends Controller {

    private val productForm: Form[Product] = Form(
        mapping(
            "ean" -> longNumber.verifying(
                "validation.ean.duplicate", Product.findByEan(_).isEmpty),
            "name" -> nonEmptyText,
            "description" -> nonEmptyText
            )(Product.apply)(Product.unapply)
        )

    def list = Action {implicit request =>
        val products = Product.findAll

        Ok(views.html.products.list(products))
    }

    def show(ean: Long) = Action {implicit request =>
        Product.findByEan(ean).map {product =>
            Ok(views.html.products.details(product))
        }.getOrElse(NotFound)
    }

    def save = Action { implicit request =>
        val newProductForm = productForm.bindFromRequest()

        newProductForm.fold(
            hasErrors = {form =>
                Redirect(routes.Products.newProduct()).
                    flashing(Flash(form.data) + ("error" -> Messages("validation.errors")))
            },

            success = {newProduct =>
                Product.add(newProduct)
                val message = Messages("products.new.success", newProduct.name)
                Redirect(routes.Products.show(newProduct.ean)).
                    flashing("success" -> message)
            }
        )
    }

    def newProduct = Action { implicit request =>
        val form = if(flash.get("error").isDefined)
            productForm.bind(flash.data)
        else
            productForm

        Ok(views.html.products.editProduct(form))
    }
}

最佳答案

示例是使用 Play < 2.3,您可能需要检查您当前使用的版本。随着 Play > 2.3,request.flash必须改用。在这两种情况下,您都可以使用 request.flash (这是更明确的)。

关于scala - 在 Products.scala 中找不到 flash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25218039/

相关文章:

list - Scala:为什么 foldLeft 不能用于两个列表的连接?

scala - 我的Play 2应用如何响应客户端的不同 "Accept" header ?

multithreading - Play Framework -如何监视我的应用程序线程池?

Scala Play 2.2 Slick 1.0.1 - future {尝试{...}}等待免费可用连接超时

json - 使用 Play 框架在 Scala 中解析 Json 字符串

scala - Spark DataFrame 根据列条件更改数据类型

scala - 我们应该直接使用 ScalaSignature 吗?

java - Play 2.2.0 - 如何创建 war 文件

java - play 2.1.1 中未找到适合调度程序的方法

scala - 限制对 Play Framework (Scala) 中特定 IP 的访问