播放2.1.1 - 从控制器传递Map值列表时出现模板错误

时间:2013-06-23 08:41:37

标签: java playframework-2.0 playframework-2.1

我想传递一个从控制器到模板的地图列表。我在编译模板时遇到错误,说“找不到:值啤酒地图”有人可以帮帮我吗?

我试过这种方式..

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>
                   }
                  }

1 个答案:

答案 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

}