如何在 playframework 2 中添加像 HashMap 这样的复合视图来旋转。4.x
How to add composite view like HashMap to twirl in playframework 2.4.x
我想在 twirl 模板中添加一个包含许多不同对象的 HashMap 对象,因为我不喜欢将一个一个作为参数添加到 twirl 中,它打破了设计模式的规则。
正常样式:
views.html.index.render(object1, object2, list3, list4, ...);
@(object1:Object1Model, object2:Object2Model, list3: List[Object3Model], list4: List[Object4Model])
有没有办法像这样设置和获取参数?
Map data = new HashMap();
data.put("object1", object1);
data.put("object2", object2);
data.put("list3", list3);
data.put("list4", list4);
views.html.index.render(data);
如何在twirl中获取和定义HashMap中的对象,twirl官方文档太简单了...
@(data:Map)
Object1Model object1 = (Object1Model) data.get("object1");
Object2Model object2 = (Object2Model) data.get("object2");
List list3 = (List) data.get("list3");
List list4 = (List) data.get("list4");
非常感谢!
为了类型安全,您可以创建一个专用的 class 包含所需类型的字段,额外的好处是复杂的 IDE 将识别字段的类型 and/or 自动完成字段名称,因此它有助于防止大家意见错误。
当然,在每个 class 中,您也可以利用构造函数 and/or getters/setters.
的好处
(伪代码):
package viewhelpers;
import java.util.ArrayList;
import java.util.List;
public class SomeViewHelper {
public String header;
public List<String> labels = new ArrayList<>();
public List<Integer> values = new ArrayList<>();
}
以某种方式将其填充到控制器中:
public static Result incomes() {
SomeViewHelper data = new SomeViewHelper();
data.header = "Incomes in first quarter";
data.labels = Arrays.asList("Jan", "Feb", "Mar");
data.values = Arrays.asList(121, 122, 123);
return ok(views.html.incomes.render(data));
}
并在视图中使用:
@(data: viewhelpers.SomeViewHelper)
<h1>@data.header</h1>
<table>
<tr>
@for(label <- data.labels) {
<th>@label</th>
}
</tr>
<tr>
@for(value <- data.values) {
<td>@value</td>
}
</tr>
</table>
我想在 twirl 模板中添加一个包含许多不同对象的 HashMap 对象,因为我不喜欢将一个一个作为参数添加到 twirl 中,它打破了设计模式的规则。
正常样式:
views.html.index.render(object1, object2, list3, list4, ...);
@(object1:Object1Model, object2:Object2Model, list3: List[Object3Model], list4: List[Object4Model])
有没有办法像这样设置和获取参数?
Map data = new HashMap();
data.put("object1", object1);
data.put("object2", object2);
data.put("list3", list3);
data.put("list4", list4);
views.html.index.render(data);
如何在twirl中获取和定义HashMap中的对象,twirl官方文档太简单了...
@(data:Map)
Object1Model object1 = (Object1Model) data.get("object1");
Object2Model object2 = (Object2Model) data.get("object2");
List list3 = (List) data.get("list3");
List list4 = (List) data.get("list4");
非常感谢!
为了类型安全,您可以创建一个专用的 class 包含所需类型的字段,额外的好处是复杂的 IDE 将识别字段的类型 and/or 自动完成字段名称,因此它有助于防止大家意见错误。
当然,在每个 class 中,您也可以利用构造函数 and/or getters/setters.
的好处(伪代码):
package viewhelpers;
import java.util.ArrayList;
import java.util.List;
public class SomeViewHelper {
public String header;
public List<String> labels = new ArrayList<>();
public List<Integer> values = new ArrayList<>();
}
以某种方式将其填充到控制器中:
public static Result incomes() {
SomeViewHelper data = new SomeViewHelper();
data.header = "Incomes in first quarter";
data.labels = Arrays.asList("Jan", "Feb", "Mar");
data.values = Arrays.asList(121, 122, 123);
return ok(views.html.incomes.render(data));
}
并在视图中使用:
@(data: viewhelpers.SomeViewHelper)
<h1>@data.header</h1>
<table>
<tr>
@for(label <- data.labels) {
<th>@label</th>
}
</tr>
<tr>
@for(value <- data.values) {
<td>@value</td>
}
</tr>
</table>