flash не найден в Products.scala

Сейчас я читаю «Play for Scala» Питера Хилтона. Я только что получил конец первого примера приложения Play, в котором вы создаете каталог скрепок.

Однако при компиляции я получаю сообщение об ошибке компиляции о том, что значение «flash» не найдено. Обычно это простая ошибка, которую я совершал, но, учитывая, что я просто следую руководству в книге, я не могу найти исправление.

Ошибка в строках 52 и 53 в функции NewProduct.

Вот код:

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))
    }
}

person Chris Brown    schedule 09.08.2014    source источник


Ответы (1)


Пример работает с Play ‹ 2.3, вы можете проверить, какую версию вы используете в данный момент. В Play > 2.3 вместо него необходимо использовать request.flash. В обоих случаях вы можете использовать request.flash (что более явно).

person cchantep    schedule 09.08.2014
comment
Потрясающий. Все исправлено. Спасибо за помощь - person Chris Brown; 09.08.2014
comment
У меня была такая же проблема с книгой, я искал целую вечность. исправил это и для меня тоже! Большое спасибо! Метод становится следующим: def newProduct = Action { неявный запрос => val form = if (request.flash.get(error.isDefined) productForm.bind(request.flash.data) else productForm Ok(views.html.products.editProduct (форма)) } - person serenskye; 28.09.2014
comment
Дополнительные сведения об этом см. в разделе «Неявные элементы сеанса и Flash» руководства по миграции версии 2.3: playframework .com/documentation/2.4.x/Migration23 - person Casey Murray; 11.02.2016