2016-07-30 40 views
0

Ich muss einige Variable implizit in URL-Erstellung in Ansichten übergeben.Play Framework 2: Implizite Werte in Sicht

I Aktion in der Steuerung haben:

class HomeController extends Controller{ 

    def index(implicit lang: Lang) = Action.async { implicit request => { 
     Future[Result] { 
     Ok(views.html.home.index(lang)) 
     } 
    } 

    ... 
    } 

ist hier Snippet index.scala.html:

@()(implicit lang: Lang) 
@main("Home page") { 
    <ul> 
     <li><a href="@routes.HomeController.index()"><span>Home</span></a> 
    ... 
    </ul> 
} 

Aber ich habe Fehler kompilieren bei @ routes.HomeController.index (), nicht genug Argumente für Methode

Warum ist es ein Fehler? Wie kann ich Variablen bei der URL-Erstellung implizit übergeben?

+0

Entfernen Sie die Klammern aus dem Reverse-Routing-Aufruf: '@ routes.HomeController.index'. Obwohl Sie Probleme haben könnten, implizite 'Lang' für die' index' Methode zu verwenden. –

+0

Ich habe das versucht, immer noch nicht funktioniert. "fehlende Argumente für Methodenindex in der Klasse ReverseHomeController" – Teimuraz

+0

parens behalten und 'def index() versuchen (implizite lang: Lang)' –

Antwort

1

Try this:

class HomeController extends Controller { 
def index = Action.async { implicit request => { 
     Future[Result] { 
     Ok(views.html.home.index) 
     } 
    } 
    ... 
    } 

Sie explictly nicht param in Funktion übergeben lang. Play Controller enthält impliziert Konvertierung von Anfrage zu lang, mit dieser Sprache wird automatisch in Ihre Ansicht zur Verfügung gestellt.

+0

Ich muss lang param in index Methode verwenden, weil ich Routen wie folgt definiert habe: GET/$ lang controllers.HomeController.index (lang: play.api.i18n.Lang). Im Grunde muss ich nicht lang Param in Index-Methode übergeben, ich brauche nur einen Teil in Route/, (Aktuelle Sprache Resolver ist Handler in Filter, diese Ich brauche nur für Routen). Aber wihtout/$ lang ... es funktioniert nicht, und wenn ich $ lang im Routenmuster gebe, dann sollte ich es an die Indexmethode übergeben, sonst erhalte ich Compilerfehler – Teimuraz

+0

Ich bin mir nicht sicher, ob ich dein Problem verstehe , aber wenn Sie den Parameter lang in der Methode beibehalten möchten, müssen Sie später diese Ansicht auf diese Weise anzeigen 'Ok (views.html.home.index() (lang))' – mgosk