2016-08-10 1 views
0

Je reçois l'erreur de compilcation ci-dessus sur les messages (« titre »)Pourquoi ai-je « n'a pas pu trouver la valeur implicite pour les messages de paramètres: 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 

fichier mes messages le dossier du projet conf contient les éléments suivants

title = hello 

et mon modèle a prend ce qui suit dans le cas où vous vous demandez:

@(title: String) 

Pourquoi ai-je cette erreur de compilation?

Répondre

1

Vous devez l'injecter dans Play 2.5. Par exemple voici comment déclaration d'un de mes contrôleurs ressemble:

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 
             ) 

Vous pouvez en savoir plus sur ce here.

+0

Impossible de le faire fonctionner mais maintenant je sais que jouer 2.4.x aucun logeur utilise des messages mais à la place il utilise MessagesApi. J'ai suivi ce lien qui a résolu mon problème [link] (http://stackoverflow.com/questions/30799988/play-2-4-form-could-not-find-implicit-value-for-parameter-messages-play- api-i) – Ramin

0

Comme Alexander mentionné ci-dessus, je devais utiliser injecter dans Play 2.5. Le code de travail ressemble maintenant à ceci:

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")))) 
    } 
} 

si vous avez une classe de test, vous pouvez suivre la logique suivante et assurez-vous d'importer « 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")) 
    } 
    } 
}