简体   繁体   English

注入MessageApi并使用I18nSupport Trait时如何传递消息

[英]How to pass Messages when I inject MessageApi and use the I18nSupport Trait

My controller actions use a custom action that looks like: 我的控制器操作使用自定义操作,如下所示:

class ActionWithContext @Inject()(....)
  extends ActionBuilder[ContextAwareRequest] {

  def invokeBlock[A](request: Request[A], block: (ContextAwareRequest[A]) =>                   Future[Result]) = {
  ... 
  }

}

class ContextAwareRequest[A](val context: MyContext, request: Request[A]) extends WrappedRequest[A](request)

My controller looks like: 我的控制器看起来像:

import play.api.i18n.{MessagesApi, I18nSupport, Messages}
import play.api.i18n.Messages.Implicits._
class WebsiteController @Inject() (val messagesApi: MessagesApi, actionWithContext: ActionWithContext, ..)
      extends BaseController with I18nSupport {


    def edit(websiteId: Int)  =  actionWithContext { request =>
        val model = ..
        Ok(views.html.backend.websites.edit(model)(request.context))
      }

    }

The view page looks like: 视图页面如下所示:

@(form: Form[controllers.WebsiteForm])(implicit context: MyContext, m: Messages) {


}

I am getting the error: 我收到错误:

not enough arguments for method apply: (implicit context: com.example.services.components.MyContext, implicit m: play.api.i18n.Messages)play.twirl.api.HtmlFormat.Appendable in class edit.
[error] Unspecified value parameter m.
[error]     Ok(views.html.websites.edit(model)(request.context))
[error]                                

I tried passing in the messageApi like: 我尝试传递messageApi,如:

 Ok(views.html.websites.edit(model)(request.context, messageApi))

But I then got a type mismatch error between Messages and MessageApi. 但是我在Messages和MessageApi之间遇到了类型不匹配错误。

What should I be doing? 我该怎么办?

PS I am not even using messages in my views, but I am using the Form helpers which I guess use messages under the covers... PS我甚至没有在我的观点中使用消息,但我正在使用表单助手,我猜这些帮助是有用的...

It looks like you're trying to pass one implicit parameter explicitly and the other implicitly. 看起来你试图明确地传递一个隐式参数而另一个隐式传递。 You have to either pass them both explicitly: 您必须明确地传递它们:

Ok(views.html.websites.edit(model)(request.context, implicitly[Messages]))

Or both implicitly: 或两者都含蓄地:

implicit val context = request.context
Ok(views.html.websites.edit(model))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM