0

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

我试过这个方法。。

控制器类:

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

1 回答 1

1

与其在视图中与地图作斗争,您可能会使用自定义模型更快地完成它,您不需要使用注释@Entity或扩展,Model在这种情况下,Ebean 不会尝试为此生成数据库表,

好处:您可以在模型的构造函数中添加一些验证或预处理,特别是当从 json 传入的数据可能包含一些错误时。您还可以添加一些方法来为您提供一些准备好的值(即 toString() )。正如您所见,在视图中使用它比使用地图更舒适,示例:

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

}
于 2013-06-23T11:50:56.137 回答