找不到参数消息的隐式值
Could not find implicit value for parameter messages
我是 Scala 和 Play 的新手,所以我想我会从一个基本的形式开始(遵循 Play 教程)。我已经尝试解决以下错误 2 天了:
could not find implicit value for parameter messages: play.api.i18n.Messages
formWithErrors => BadRequest(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)
)
}
我是不是漏掉了一些明显的东西?向正确的方向推进将不胜感激
我认为您可以从表单中删除第二个参数列表,因为您没有在任何地方使用参数 messages
。这将解决您的编译错误。
@(form: Form[UserData])(implicit messages: Messages)
可以
@(form: Form[UserData])
如果您 计划使用国际化消息,您应该在调用视图的范围内提供一个implicit val messages = ...
。这样做的正常方法是将您的消息放入外部文件 conf/messages
并将 I18nSupport 混合到您的控制器中,它将提供隐式消息值 described here.
您的模板需要两个参数列表
@(form: Form[UserData])(implicit messages: Messages)
但您只传递了 userData (formWithErrors) 表单
formWithErrors => BadRequest(views.html.contact.index(formWithErrors))
您需要将消息手动传递为
formWithErrors => BadRequest(views.html.contact.index(formWithErrors)(message))
或
将消息声明为范围内的隐式变量 as
implicit val message: Message = ...
我是 Scala 和 Play 的新手,所以我想我会从一个基本的形式开始(遵循 Play 教程)。我已经尝试解决以下错误 2 天了:
could not find implicit value for parameter messages: play.api.i18n.Messages
formWithErrors => BadRequest(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)
)
}
我是不是漏掉了一些明显的东西?向正确的方向推进将不胜感激
我认为您可以从表单中删除第二个参数列表,因为您没有在任何地方使用参数 messages
。这将解决您的编译错误。
@(form: Form[UserData])(implicit messages: Messages)
可以
@(form: Form[UserData])
如果您 计划使用国际化消息,您应该在调用视图的范围内提供一个implicit val messages = ...
。这样做的正常方法是将您的消息放入外部文件 conf/messages
并将 I18nSupport 混合到您的控制器中,它将提供隐式消息值 described here.
您的模板需要两个参数列表
@(form: Form[UserData])(implicit messages: Messages)
但您只传递了 userData (formWithErrors) 表单
formWithErrors => BadRequest(views.html.contact.index(formWithErrors))
您需要将消息手动传递为
formWithErrors => BadRequest(views.html.contact.index(formWithErrors)(message))
或 将消息声明为范围内的隐式变量 as
implicit val message: Message = ...