Не удалось найти неявное значение для параметра 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
Ответ 3
У Ивана было правильное предложение, добавив "неявный запрос". Однако его ссылка кажется устаревшей. Если вы хотите более ясное объяснение, посмотрите мой ответ на аналогичный вопрос, здесь:
Как передать данные флэш-памяти от контроллера для просмотра в Play! рамки
Ответ 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