Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How is it possible to pass multiple params into a template in Play 2.0?

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!

like image 914
doniyor Avatar asked Jun 30 '12 09:06

doniyor


1 Answers

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

Map

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

View model

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>
like image 175
biesior Avatar answered Sep 20 '22 09:09

biesior