Play Framework:如何从纯SQL表中呈现表结构

时间:2012-02-20 22:05:54

标签: datatable playframework rendering

我很乐意从普通的SQL表中获得“表”结构。

在我的具体情况下,我需要呈现Google Visualization API“datatable”对象使用的JSON结构: http://code.google.com/apis/chart/interactive/docs/reference.html#DataTable 但是,在HTML中使用示例会有所帮助。

我的“源代码”是“DailySales”的简单SQL表:其列为“Day”(日期),“Product”和“DailySaleTotal”(该产品的每日销售)。请记住,我的“模型”反映了上面的3列表。

表格列应该是“产品”(假设我们的数量非常少)。每行应代表特定日期,行数据是当天的实际销售额。

    Date             Product1   Product2   Product3
    01/01/2012       30         50         60
    01/02/2012       35         3          15

我试图在模板中使用嵌套的#{list}标签,但遗憾的是我找不到一种自然的方式来提供一个带有“列表”的模板来表示“行数据”。

当然,我可以在Java中构建一个“帮助对象”,它将构建每个日期的“销售数据”项目列表 - 但这对我来说非常奇怪。

我会感谢能够提供优雅解决方案的任何人。

最高

2 个答案:

答案 0 :(得分:2)

按日期和产品名称加载模型时。然后在您的控制器中构建一个以日期为索引的地图和与地图值具有相同日期的模型对象列表

然后在模板中,您可以对行的地图键进行第一次列表迭代,并对列的列表值进行第二次列表迭代。

这样的东西
[
#{list modelMap.keys, as: 'date'}
[${date},#{list modelMap.get(date), as: 'product'}${product.dailySaleTotal}#{ifnot product_isLast},#{/ifnot}#{/list}]#{ifnot date_isLast},#{/ifnot}
#{/list}
]

然后,您可以将json渲染调整为您想要的精确结构。这是一个数组数组。

答案 1 :(得分:2)

而不是像Seb建议的那样自己生成JSON,你可以生成它:

private static Result queryToJsonResult(String sql) {
  SqlQuery sqlQuery = Ebean.createSqlQuery(sql);
  return ok(Json.toJson(sqlQuery.findList()));
}