无法找到参数消息的隐含值

时间:2015-11-19 18:32:54

标签: forms scala playframework messages playframework-2.4

我对Scala和Play都很陌生,所以我想从基本形式开始简单(按照Play教程)。我已经尝试解决以下错误2天了:

  

找不到参数消息的隐含值:play.api.i18n.Messages
formWithErrors =>错误请求(views.html.contact.index(formWithErrors))

这是我到目前为止的代码:

控制器:

package controllers.contact

import play.api._
import play.api.mvc._
import models.contact.UserData

class ContactController extends Controller {
    def index = Action {
        Ok(views.html.contact.index(UserData.form))
    }

    def create = Action { implicit request =>
        UserData.form.bindFromRequest().fold(
                formWithErrors => BadRequest(views.html.contact.index(formWithErrors)),
                customer => Ok(s"Customer ${customer.name} created")
            )
    }
}

查看:

@import play.api.data.Form
@import helper._
@import models.contact.UserData
@(form: Form[UserData])(implicit messages: Messages)

@main("") {
    @helper.form(action = controllers.contact.routes.ContactController.create()) {
        @helper.inputText(form("name"))
        @helper.inputText(form("age"))
        <input type="submit" value="Submit">
    }
}

型号:

package models.contact

import play.api.data._
import play.api.data.Forms._

case class UserData(val name: String, val age: Int)

object UserData {
    val form = Form(
            mapping (
                "name" -> text,
                "age" -> number
            )(UserData.apply)(UserData.unapply)
        )
}

我错过了一些非常明显的东西吗?向正确的方向推进真的很感激

2 个答案:

答案 0 :(得分:1)

我认为您可以从表单中删除第二个参数列表,因为您不能在任何地方使用参数messages。这将解决您的编译错误。

@(form: Form[UserData])(implicit messages: Messages)

可以

@(form: Form[UserData])

如果 计划使用国际化消息,则应在调用视图的范围内提供implicit val messages = ...。执行此操作的常规方法是将消息放入外部文件conf/messages并将I18nSupport混合到控制器中,这将提供隐式消息值described here

答案 1 :(得分:1)

您的模板需要两个参数列表

@(form: Form[UserData])(implicit messages: Messages) 

但是你只传递了userData(formWithErrors)表格

formWithErrors => BadRequest(views.html.contact.index(formWithErrors))

您需要将消息手动传递为

formWithErrors => BadRequest(views.html.contact.index(formWithErrors)(message))

或 将消息声明为范围中的隐式变量

implicit val message: Message = ...