【问题标题】:Scala Play 2.5 Form convention and implicit Messages (MessagesApi) accessScala Play 2.5 表单约定和隐式消息 (MessagesApi) 访问
【发布时间】:2016-12-12 19:36:33
【问题描述】:

我正在研究this Scala Play application,经过研究和思考后,我倾向于一种将所有表单放在表单包下的设计,在视图中使用它们的级别(或适用的最顶层),例如

 app
    | views 
           | account
                    | form (all Form used by account will be here)
                          | PasswordChangeForm.scala

那么PasswordChangeForm.scala表单实现为:

package views.account.form

import play.api.data.Form
import play.api.data.Forms.{mapping, text}
import play.api.i18n.Messages

case class PasswordChange(password: String, repeatPassword: String)

object PasswordChangeForm {
  val Instance = Form {
    mapping(
      "password" -> text(minLength = 5),
      "repeatPassword" -> text(minLength = 5)
    )(PasswordChange.apply)(PasswordChange.unapply).
      verifying(Messages("playauthenticate.change_password.error.passwords_not_same"),
        data => data.password != null && !data.password.isEmpty && data.password.equals(data.repeatPassword))
  }
}

问题是我不知道如何使Messages 或更好的MessagesApi 可用于错误报告的表单。

编译错误如预期could not find implicit value for parameter messages: play.api.i18n.Messages:

[error] /home/bravegag/code/play-authenticate-usage-scala/app/views/account/form/PasswordChangeForm.scala:15: could not find implicit value for parameter messages: play.api.i18n.Messages
[error]       verifying(Messages("playauthenticate.change_password.error.passwords_not_same"),

更新一种可能是重构上述解决方案:

val Instance = Form { 

def create(implicit messages: Messages) = Form {

但它每次都会创建一个Form 的新实例。

【问题讨论】:

    标签: scala playframework play-authenticate


    【解决方案1】:

    使您的PasswordChangeForm 成为单例类并使用guice 依赖注入注入MessagesApi

    @Singleton
    class PasswordChangeForm @Inject() (messages: MessagesApi) {
      //now use it like this messages("somekey")
    }
    

    用法:

    messages("somekey")
    

    上面的结构是单例的,由guice保证。 Guice 在 PasswordChangeForm 的初始化过程中注入消息 api。

    【讨论】:

    • 谢谢!我收敛到相同的解决方案,除了我注入 messages: Messages 有点更好的旧时尚方式:)
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多