1

我正在尝试将我的应用程序从 2.3 迁移到 2.4。在我们的代码库中,我们广泛使用了 Messages,因此任何删除它的方法都会有所帮助。目前我们的代码是这样的

class MyController @Inject() 
(val messagesApi: MessagesApi) extends  Controller  with I18nSupport{

    def methodA() = {
        new MyControllerService.doSomething()
    }
}

class MyControllerService{
    def doSomething()(implicit messages:Messages){
        messages(any_key)
    }
}

编译此代码时,我收到错误:(31、84)播放 2 编译器:找不到参数消息的隐式值:play.api.i18n.Messages 编译时错误消息。

请帮助解决此问题,欢迎以更好的方式改进此类问题的任何建议。

4

2 回答 2

0

这样做:

class MyController @Inject() 
(val messagesApi: MessagesApi) extends  Controller  with I18nSupport{

    def methodA() = { request =>
        implicit val messages = messageApi.prefered(request)
        new MyControllerService.doSomething()
    }
}

class MyControllerService{
    def doSomething()(implicit messages:Messages){
        messages(any_key)
    }
}

或者您可以通过这种方式直接传递创建的消息对象:

new MyControllerService.doSomething()(messages)
于 2015-06-09T20:43:48.107 回答
0

您需要在您的操作中有一个隐式请求和“注入”的导入,如下所示:

package controllers

import javax.inject.Inject
import javax.inject._
import play.api.i18n.{ I18nSupport, MessagesApi, Messages, Lang }
import play.api._
import play.api.mvc._

class Application @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport {

  def home() = Action { implicit request =>
    Ok(views.html.home()).as(HTML)
  }
}

此外,您需要在 build.sbt 中启用注入路由器:

routesGenerator := InjectedRoutesGenerator
于 2015-09-29T04:33:04.377 回答