Я пытаюсь проверить переменные пути выборки в своем локальном приложении, используя Play Framework 2.5.3.не смог найти неявное значение для сообщений параметров: play.api.i18n.Messages в Play Framework 2.5.3
package controllers
import play.api._
import play.api.data._
import play.api.data.Forms._
import play.api.mvc._
import play.api.libs.json._
import play.api.libs.json.Json._
import play.api.libs.functional.syntax._
case class Product(sku: String, title: String)
object Product {
implicit def pathBinder(implicit stringBinder: PathBindable[String]) = new PathBindable[Product] {
override def bind(key: String, value: String): Either[String, Product] = {
for {
sku <- stringBinder.bind(key, value).right
product <- productMap.get(sku).toRight("Product not found").right
} yield product
}
override def unbind(key: String, product: Product): String = {
stringBinder.unbind(key, product.sku)
}
}
def add(product: Product) = productMap += (product.sku -> product)
val productMap = scala.collection.mutable.Map(
"ABC" -> Product("ABC", "8-Port Switch"),
"DEF" -> Product("DEF", "16-Port Switch"),
"GHI" -> Product("GHI", "24-Port Switch")
)
}
object Products extends Controller {
implicit val productWrites = new Writes[Product] {
def writes(product: Product) = Json.obj(
"sku" -> product.sku,
"title" -> product.title
)
}
implicit val productReads: Reads[Product] = (
(JsPath \ "sku").read[String] and
(JsPath \ "title").read[String]
)(Product.apply _)
val productForm: Form[Product] = Form(
mapping(
"sku" -> nonEmptyText,
"title" -> nonEmptyText
)(Product.apply)(Product.unapply)
)
def index = Action {
Ok(toJson(Product.productMap.values))
}
def postProduct = Action(BodyParsers.parse.json) { request =>
val post = request.body.validate[Product]
post.fold(
errors => {
BadRequest(Json.obj("status" ->"error", "message" -> JsError.toFlatJson(errors)))
},
product => {
Product.add(product)
Created(toJson(product))
}
)
}
def edit(product: Product) = Action {
Ok(views.html.products.form(product.sku, productForm.fill(product)))
}
def update(sku: String) = Action {
Ok("Received update request")
}
}
И ниже мой вид.
@(sku: String, productForm: Form[controllers.Product])
@helper.form(action = routes.Products.update(sku)) {
@helper.inputText(productForm("sku"))
@helper.inputText(productForm("title"))
}
Когда я компиляции этой программы я получаю ниже ошибки
[error] /home/rajkumar/CodeBase/workspaceEclipse/PFC2/app/views/products/form.scala.html:4: could not find implicit value for parameter messages: play.api.i18n.Messages
[error] @helper.inputText(productForm("sku"))
[error] ^
[error] /home/rajkumar/CodeBase/workspaceEclipse/PFC2/app/views/products/form.scala.html:5: could not find implicit value for parameter messages: play.api.i18n.Messages
[error] @helper.inputText(productForm("title"))
[error] ^
[error] 9 errors found
[error] (compile:compileIncremental) Compilation failed
Может ли мне помочь решению этой проблемы.
Мне нужно добавить эти пакеты в контроллеры или в views.html –
@RajkumarNatarajan Нет, вам не нужно добавлять пакет в представление, но вам нужно добавить «неявные сообщения» в представление, я обновил ответ , удачи – Jerry
Это устарело со времен игры 2.5 (в частности, play.api.Play.current), см. ссылочный вопрос для правильного ответа. –