2016-05-22 1 views
0

Я пытаюсь проверить переменные пути выборки в своем локальном приложении, используя 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 

Может ли мне помочь решению этой проблемы.

ответ

0

, когда вы используете inputText, необходимы «неявные сообщения». Добавьте его путем импорта следующих утверждений

import play.api.Play.current 
import play.api.i18n.Messages.Implicits._ 

В воззрениях вам необходимо добавить следующий код

@(sku: String, productForm: Form[controllers.Product])(implicit messages: Messages) 

ссылка Play 2.4: Form: could not find implicit value for parameter messages: play.api.i18n.Messages

+0

Мне нужно добавить эти пакеты в контроллеры или в views.html –

+0

@RajkumarNatarajan Нет, вам не нужно добавлять пакет в представление, но вам нужно добавить «неявные сообщения» в представление, я обновил ответ , удачи – Jerry

+1

Это устарело со времен игры 2.5 (в частности, play.api.Play.current), см. ссылочный вопрос для правильного ответа. –

1

Как @ Ирка-helmich отметил, решение по @ Джерри устарела.

Слушать 2.5.x documentation перечисляет следующее решение (обратите внимание на I18nSupport черта):

import javax.inject.Inject 
import play.api.i18n.I18nSupport 
class MyController @Inject()(val messagesApi: MessagesApi) extends Controller with I18nSupport { 
// ... 

См this answer для более подробной информации.

 Смежные вопросы

  • Нет связанных вопросов^_^