[英]How to pass Messages when I inject MessageApi and use the I18nSupport Trait
我的控制器操作使用自定義操作,如下所示:
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)
我的控制器看起來像:
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))
}
}
視圖頁面如下所示:
@(form: Form[controllers.WebsiteForm])(implicit context: MyContext, m: Messages) {
}
我收到錯誤:
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]
我嘗試傳遞messageApi,如:
Ok(views.html.websites.edit(model)(request.context, messageApi))
但是我在Messages和MessageApi之間遇到了類型不匹配錯誤。
我該怎么辦?
PS我甚至沒有在我的觀點中使用消息,但我正在使用表單助手,我猜這些幫助是有用的...
看起來你試圖明確地傳遞一個隱式參數而另一個隱式傳遞。 您必須明確地傳遞它們:
Ok(views.html.websites.edit(model)(request.context, implicitly[Messages]))
或兩者都含蓄地:
implicit val context = request.context
Ok(views.html.websites.edit(model))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.