2013-04-18 7 views
5

Ho bisogno di stampare codice HTML grezzo nel modello Scala utilizzando il più recente Play Framework 2.1.1 Messaggi, variabili, cicli semplici, ecc. Tutto funziona correttamente. Ma cosa succede se ho bisogno di fare un po 'di logica e stampare HTML grezzo nel modello?Stampa HTML in modello Scala

@{ 
    val courts = venue.getCourts() 
    val totalWidth : Int = 920 
    .. some other initialization variables/values 

    var output : String = "" 
    for(court <- courts) { 
     output += "<p>SomeComplexString</p>" 
    } 

    output 
} 

In questa funzione caso @{} restituisce output ma che HTML è sfuggito ed inoltre non è così pratico (che unisce il tutto in un'unica output variabile prima di tornare).

Se metto qualcosa come

for(court <- courts) { 
    println("<p>SomeComplexString</p>") 
} 

non funziona (non ho ricevuto alcuna errori di compilazione, ma non c'è niente in uscita).

ho potuto fare

@for(court <- courts) { 
    <p>SomeComplexString</p> 
} 

ma poi courts sarebbe out-of-scope (lascia solo dire che non so definire courts come variabile di modello sull'inizio).

Qual è la soluzione?

risposta

14

Ma cosa succede se ho bisogno di fare un po 'di logica e stampare HTML grezzo nel modello?

Play Framework, come altri framework MVC, raccomanda una rigorosa separazione delle preoccupazioni. La tua logica deve essere nel tuo controller, non nella vista. È per questo che è relativamente complicato farlo nei modelli di scala.

Inoltre, è possibile utilizzare @Html() per visualizzare variabili senza caratteri di escape.

+0

risposta corretta ma evitare l'uso di '@Html()' a causa di problemi di sicurezza. – adis

+0

@adis Puoi specificare i problemi di sicurezza di @Html()? – user1943442

+0

@ user1943442 Injection script se si usa '@ Html' da un input dell'utente. Per saperne di più: http://wonko.com/post/html-escaping – adis