如何在Play 2.0中将多个参数传递给模板?

don*_*yor 9 java parameters templates rendering playframework-2.0

我想在同一时间向我的模板渲染2件事:

String one = "one"; 
String two = "two";
return ok(template.render(one,two));
Run Code Online (Sandbox Code Playgroud)

但Playframework说,这是错误的.那么如何同时渲染2个值呢?我应该将它们保存到列表中吗?但后来我必须在我的模板中再次解压缩.. :(

请帮忙!感谢任何帮助!

bie*_*ior 19

2.0中的Play模板只是Scala函数,因此您需要在模板的开头声明params(从第1行开始):

@(one: String, two: String)

This is first param: @one <br/>
This is second param: @two
Run Code Online (Sandbox Code Playgroud)

检查模板文档以获取详细信息

地图

另一方面,如果你需要传递大量相同类型的变量,那么Map也可以是一个很好的解决方案:

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));
}
Run Code Online (Sandbox Code Playgroud)

template.scala.html

@(labels: Map[String, String])

@labels.get("first") <br/>
@labels.get("second") <br/>
.....
@labels.get("hundredth")
Run Code Online (Sandbox Code Playgroud)

查看模型

最后,为了使事情更加类型安全,你可以创建自己的view models(样本):

package models.view;

import java.util.Date;

public class MyViewModel {

    public String pageTitle = "";
    public Date currentDate = new Date();
    public Integer counter = 0;
    // etc...

}
Run Code Online (Sandbox Code Playgroud)

控制器:

public static Result myActionUsingModel() {
    MyViewModel data = new MyViewModel();
    data.pageTitle = "Ellou' World!";
    data.counter = 123;

    return ok(myViewUsingModel.render(data));
}
Run Code Online (Sandbox Code Playgroud)

视图:

@(data: models.view.MyViewModel)

<h1>@data.pageTitle</h1>

<div>Now is: @data.currentDate</div>
<div>The counter value is: @data.counter</div>
Run Code Online (Sandbox Code Playgroud)