i want to render to my template 2 things at the same time like this:
String one = "one";
String two = "two";
return ok(template.render(one,two));
but Playframework says, it is wrong. how is it possible to render 2 values at the same time then? should i save them into a list? but then i have to unpack it again in my template.. :(
please help! appreciate any help!
Play templates in 2.0 are just Scala functions, so you need to declare params at the beginning of the template (beginning from line #1):
@(one: String, two: String)
This is first param: @one <br/>
This is second param: @two
Check the templates docs for details
On the other way if you need to pass large quantity of variables of the same type then the Map
can be good solution as well:
public static Result index() {
Map<String, String> labels = new HashMap<String, String>();
labels.put("first", "First label");
labels.put("second", "Second label");
// etc etc
labels.put("hundredth", "Label no. 100");
return ok(template.render(labels));
}
template.scala.html
@(labels: Map[String, String])
@labels.get("first") <br/>
@labels.get("second") <br/>
.....
@labels.get("hundredth")
Finally to make things even more typesafe you can create your own view models
like (sample):
package models.view;
import java.util.Date;
public class MyViewModel {
public String pageTitle = "";
public Date currentDate = new Date();
public Integer counter = 0;
// etc...
}
controller:
public static Result myActionUsingModel() {
MyViewModel data = new MyViewModel();
data.pageTitle = "Ellou' World!";
data.counter = 123;
return ok(myViewUsingModel.render(data));
}
view:
@(data: models.view.MyViewModel)
<h1>@data.pageTitle</h1>
<div>Now is: @data.currentDate</div>
<div>The counter value is: @data.counter</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With