我想传递一个从控制器到模板的地图列表。我在编译模板时遇到错误,说“找不到:值啤酒地图”有人可以帮帮我吗?
我试过这种方式..
ControllerClass:
public static Result index(){
Map<String, String> beerMap=null;
ArrayList<Map<String, String>> beerList =
new ArrayList<Map<String, String>>();
for(ViewRow row : result) {
Map<String, String> parsedDoc = gson.fromJson(
(String)row.getDocument(), HashMap.class);
beerMap = new HashMap<String, String>();
beerMap.put("name", row.getName());
}
beerList.add(beerMap);
return ok(index.render(beerList));
}
我试图像那样定义模板
@(beerList: List[Map[String,String]])
@for(beerMap <- beerList){
@beerMap.map { beer =>
<tr>
<td><a href="/beers/show/@beer.name">@beer.name</a></td>
</tr>
}
}
答案 0 :(得分:1)
您可能无法使用自定义模型更快地使用地图中的地图,您可以使用@Entity
进行注释,或者使用Model
进行扩展,在这种情况下,Ebean会不要尝试为此生成数据库表,
好处:您可以在模型的构造函数中添加一些验证或预处理,尤其是当来自json 的数据可能包含某些错误时。您还可以添加一些方法来为您提供一些准备值(即toString())。正如您所看到的,在视图中使用它比使用Maps更加舒适,示例:
models/Beer.java
package models;
public class Beer {
public String name;
public String url;
public String description;
public Beer(String name, String url) {
this.name = name;
this.url = url;
}
public String toString() {
return this.name;
}
}
某个控制器......
public static Result index() {
List<Beer> beers = new ArrayList<Beer>();
// some dummy data
beers.add(new Beer("Beer A", "beer_a"));
beers.add(new Beer("Beer B", "beer_b"));
Beer beerC =new Beer("Beer C", "beer_c");
beerC.description= "Beer C has additional description";
beers.add(beerC);
return ok(index.render(beers));
}
index view
@(beers: List[Beer])
@main("List of beers") {
@for(beer <- beers){
<div>
<h1>@beer</h1>
<h2>@beer.description</h2>
<a href="/beers/@beer.url">@beer.name</a>
</div>
}
note: thanks to toString() method in the model @@beer is a shorthand for @@beer.name
}