java - Play 2.1.1 - 从 Controller 传递映射值列表时出现模板错误

标签 java playframework-2.0 playframework-2.1

我想将 map 列表从 Controller 传递到模板。我在编译模板时遇到错误,它说“未找到:value beerMap”有人可以帮助我吗?

我试过这个方法..

Controller 类:

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

我尝试像这样定义 templatete

@(beerList: List[Map[String,String]])
@for(beerMap <- beerList){
          @beerMap.map { beer =>
               <tr>
                        <td><a href="/beers/show/@beer.name">@beer.name</a></td>
                    </tr>
                   }
                  }

最佳答案

您不必在 View 中使用 map ,您可能会使用自定义模型更快地完成它,您不需要使用 @Entity 对其进行注释或使用 Model 进行扩展 code> 在这种情况下,Ebean 将不会尝试为此生成数据库表,

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

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

一些 Controller ...

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

索引 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

}

关于java - Play 2.1.1 - 从 Controller 传递映射值列表时出现模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259037/

相关文章:

java - 运行 while 语句后结束 Java 线程

java - 在我的网络应用程序中创建一个只有我可以访问的网页

jpa - Playframework 将列表发布到 Controller

twitter-bootstrap - Play framework 2.1.x 不会编译 Twitter Bootstrap 3 LESS

java - 将值写入文本文件,读取它并在db中显示

java - 确定合适的缓冲区大小

web-services - 从 play 2 调用多个 Web 服务

java - 通过 h2 浏览器和控制台与 PlayFramework 中的 EBean 模型类进行交互

Scala Web 框架的安全性

postgresql - 斯卡拉和玩! & Slick & PostgreSQL 自增