2014-06-19 4 views
8

Ich bin nur ersten Arbeit mit dem Spiel-Framework, und ich versuche, die Interaktion zwischen Java-Anwendung zu verstehen Code und das Scala-basierte Template-Framework (Anmerkung: Ich weiß bisher absolut nichts über Scala, abgesehen davon, dass es eine andere Sprache ist, die auf der JVM zu Bytecode kompiliert und dass Ihre Scala- und Java-Klassen interagieren können).Wie ich ein HTML-Objekt aus einer String-Variablen in Java-Controller-Code innerhalb der play (2.3) Rahmenwerk

Ich habe eine test1.scala.html Vorlage, die wie folgt aussieht:

@(title: String)(content: Html) 

<!DOCTYPE html> 

<html> 
    <head> 
     <title>@title</title> 
    </head> 
    <body> 
     @content 
    </body> </html> 

Wie Sie aus der oberen Zeile sehen können, die Vorlage erwartet einen String und ein HTML-Argument, aber ich kann nicht verstehen heraus, wie man das Html-Argument vom Java-Aufrufercode konstruiert!

Ich habe einige Veränderungen in meinem Controller-Klasse versucht:

return ok(test1.render("My Title","It <em>finally</em> works!")); 

dies nicht gelingt, offensichtlich, weil das zweite Argument ein String ist und nicht Html, so habe ich ein Mismatch-Argument. (Es gibt einen Laufzeitfehler: actual argument String cannot be converted to Html by method invocation conversion - was Sinn macht, aber ich hatte hier etwas Magie gehofft :))

Also habe ich versucht, einige HTML aus einem String zu erstellen, herauszufinden, dass dies eine wahrscheinliche Helfer-Klasse irgendwo im Paket war und dies könnte ‚einfach funktionieren‘:

return ok(test1.render("My Title",new Html("It <em>finally</em> works!"))); 

Dies wird nicht kompilieren, weil javac kann keine HTML-Klasse finden. OK Fair genug. Scannen die Spieldokumentation, erscheint eine play.api.templates.Html Klasse zu sein (geschrieben in Scala) mit einem Konstruktor, der einen String, so dass ich versuchen, die vollen Paket qualifizierten Namen:

return ok(test1.render("My Title",new play.api.templates.Html("It <em>finally</em> works!"))); 

Und diesen Kompiliert auch nicht: Ich bekomme ein Symbol nicht gefunden für 'Html' im Paket play.api.templates.

Also: Was ist die magische Soße, die mich meinen String (der ein HTML-Snippet enthält) in ein HTML-Objekt verwandeln kann, das ich in die Vorlage einfügen kann?

Antwort

8

Spielvorlagen wurden in das Twirl Modul ausgedruckt, wie in der Play 2.3 Migration Guide angegeben.

play.api.templates.Html ist jetzt play.twirl.api.Html.

+0

Ausgezeichnet! Das ist die Information, die mir fehlte. Vielen Dank! – JVMATL

+2

importieren play.twirl.api.Html. Und es ist jetzt Html.apply (). Oder Sie könnten auf die nächste Nebenversion warten, wenn sie möglicherweise wieder geändert wird. Karlth