2016-05-22 6 views
0

Play Framework 2.5.3を使用してローカルのサンプルパス変数をテストしようとしています。は、パラメータメッセージの暗黙の値を見つけることができませんでした。Play Framework 2.5.3のplay.api.i18n.Messages

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を使用すると、「暗黙のメッセージ」が必要です。 @ jirka-helmichは、@によって溶液を指摘したように眺めて

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

を追加する必要がありますjerryは推奨されていません。

以下の溶液(I18nSupport形質を注意してください)一覧表示documentationプレイ2.5.X:

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

は詳細についてthis answerを参照してください。

関連する問題