Не удалось найти неявное значение для параметра flash

Я пытаюсь перенести некоторый код из Play Framework Java в Play Framework Scala, но у меня возникли проблемы с портированием тега.

Тег, о котором идет речь в версии Java, проверяет содержимое области Flash и создает уведомления пользователю в соответствии со своими значениями (ошибка, успех и т.д.).

Я попытался создать представление Scala (flag.scala.html):

@()(implicit flash:play.mvc.Scope.Flash)

@if(flash.get("error")) {
    <p style="color:#c00">
        @flash.get("error")
    </p>
}

Я вызываю из main.scala.html через:

@views.Application.html.flag()

Ошибка, которую я получаю:

Файл {module:.}/tmp/generated/views.html.main.scala не может быть скомпилирован. Возникла ошибка: не удалось найти неявное значение для Параметр flash: play.mvc.Scope.Flash

Вызов нового тега правильный, как если бы я заменил контент на некоторую строку, показанную в браузере.

Я уверен, что это что-то глупое, но я застрял. Любое предложение?

Ответы

Ответ 1

Я не знаю подробностей Play, но эта ошибка компиляции говорит, что вы должны:

  • Передайте явный экземпляр play.mvc.Scope.Flash в вызове flag(),

    views.Application.html.flag()(myFlash)
    

    или

  • Сделайте неявный экземпляр Flash доступным в области, где вызывается flag(). Вы можете сделать это, импортировав содержимое какого-либо объекта (import some.path.FlashImplicits._) или указав неявный экземпляр самостоятельно,

    implicit val myFlash: play.mvc.Scope.Flash = ...
    ...
    views.Application.html.flag()
    

Итак, возникает реальный вопрос: где вы хотите получить этот экземпляр Flash?

Ответ 2

Вы не должны создавать реализацию для "неявной flash: Flash" самостоятельно. Просто добавьте "неявный запрос" к вашему действию, и он должен работать.

Подробнее здесь, в конце страницы: https://github.com/playframework/Play20/wiki/ScalaSessionFlash

Ответ 4

У меня была такая же проблема, но, глядя на документацию, я нашел следующее:

Если ошибка "не удалось найти неявное значение для параметра flash: play.api.mvc.Flash поднят, то это потому, что ваше действие didnt импортировать объект запроса. Добавьте" неявный запрос = > "

конечно, неявный Flash должен появиться в каждом представлении, если у вас есть вложенные представления:

@(implicit flash: Flash){

@main(){<h1>hello</h1>}

}

В этом представлении не используется флэш-область, но если основная ее использует, она должна быть объявлена ​​в представлениях с использованием main, потому что компилятор будет жаловаться.

источник: http://www.playframework.com/documentation/2.1.1/ScalaSessionFlash