How is it possible to pass multiple params into a

2019-02-12 16:47发布

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!

1条回答
疯言疯语
2楼-- · 2019-02-12 17:35

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>
查看更多
登录 后发表回答