2016-08-10 33 views
0

我得到的訊息的上述compilcation錯誤(「標題」)爲什麼會出現「找不到參數消息隱含值:play.api.i18n.Messages」

import play.api.i18n.Messages 
import play.api.mvc._ 
import scala.concurrent.Future 

trait ApplicationController extends Controller { 

    def get = Action.async { 
    implicit request => Future.successful(Ok(views.html.index(Messages("title")))) 
    } 
} 

object ApplicationController extends ApplicationController 

我的郵件文件中該項目的conf文件夾包含以下

title = hello 

和我的模板已採取以下的情況下,你想知道:

@(title: String) 

爲什麼我得到這個編譯錯誤?

回答

1

您需要在Play 2.5中注入它。 例如這裏是我的控制器的一個聲明的樣子:

import play.api.i18n.MessagesApi 
import javax.inject._ 

class ApplicationController @Inject()(
              val messagesApi:MessagesApi, 
              val env:Environment[User, CookieAuthenticator], 
              implicit val webJarAssets:WebJarAssets, 
              val timeZoneItemService:TimeZoneItemService, 
              val userService: UserService, 
              authInfoRepository: AuthInfoRepository, 
              passwordHasher: PasswordHasher 
             ) 

你可以閱讀更多關於這here

+0

無法完成它的工作,但現在我知道玩2.4.x沒有loger使用消息,而是它使用MessagesApi。我跟着這個鏈接解決了我的問題[鏈接](http://stackoverflow.com/questions/30799988/play-2-4-form-could-not-find-implicit-value-for-parameter-messages-play- API-I) – Ramin

0

像亞歷山大提到的,我需要在Play 2.5中使用注入。工作代碼現在看起來是這樣的:

import play.api.i18n.{Messages, I18nSupport, MessagesApi} 
import play.api.mvc._ 
import scala.concurrent.Future 

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

    def get = Action.async { 
    implicit request => Future.successful(Ok(views.html.index(Messages("title")))) 
    } 
} 

,如果你有一個測試類,你可以按照下面的邏輯,並確保您導入「play.api.i18n.Messages.Implicits._」:

import controllers.ApplicationController 
import org.scalatestplus.play.{OneServerPerSuite, PlaySpec} 
import play.api.i18n.{MessagesApi, Messages} 
import play.api.i18n.Messages.Implicits._ 
import play.api.mvc.Result 
import play.api.test.FakeRequest 
import play.api.test.Helpers._ 
import scala.concurrent.Future 

class ApplicationControllerSpec extends PlaySpec with OneServerPerSuite{ 

    val applicationController = new ApplicationController(app.injector.instanceOf[MessagesApi]) 

    "ApplicationController" must { 

    "load front page successfully" in { 
     val result: Future[Result] = applicationController.get().apply(FakeRequest()) 

     contentAsString(result) must include(Messages("home.title")) 
    } 
    } 
} 
相關問題