如何循环使用grails中的.list获取的数据库中的数据?

时间:2015-08-12 09:16:47

标签: grails

我有一个控制器,其动作看起来像这样

def createGraph(){
    def dailyProfit = DailyProfit.list()
    //loop through the data and parse
    //render graph
}

我需要解析所提取的数据并在 google chart plugin 中使用它。

我如何能够遍历所有值然后将数据传递给视图?

3 个答案:

答案 0 :(得分:1)

为什么不将您的数据集传递给GSP,如:

def chart(){
def dataset = DailyProfit.list()
[dataset: dataset]
}  

然后是GSP中的每个列表数据集:

<html>
  <head>
<script type="text/javascript"
      src="https://www.google.com/jsapi?autoload={
        'modules':[{
          'name':'visualization',
          'version':'1',
          'packages':['corechart']
        }]
      }">
</script>

<script type="text/javascript">
  google.setOnLoadCallback(drawChart);

        function drawChart() {

    var data = google.visualization.arrayToDataTable([
['time', 'sales'],
<g:each in="${dataset}" var="row" status="i">['${row.time}', ${row.sales}],</g:each>

]);         


    var options = {
      title: 'Company Performance',
      curveType: 'function',
      legend: { position: 'bottom' }
    };

    var chart = new google.visualization.LineChart(document.getElementById   ('curve_chart'));

       chart.draw(data, options);
    }
    </script>
      </head>
      <body>
   <div id="curve_chart" style="width: 900px; height: 500px"></div>
  </body>
 </html>

https://developers.google.com/chart/interactive/docs/gallery/linechart

答案 1 :(得分:0)

假设DailyProfit.list()返回一个Collection。如果是这样,你可以使用“each”和一个闭包轻松地循环它: 在下面的示例中,我将使用“list”方法获取数据列表,然后我将解析它们并将其放入一个新列表中,我将在视图中呈现:

def createGraph(){
    def dailyProfit = DailyProfit.list()
    def parsedDatas = []
    //looping and parsing
    dailyProfit.each
    {
      def parsedObject = Toolbox.verifyAndParse(it) //returns a parsedObject
      parsedDatas.add(parsedObject)
    }
    //Rendering
    render(view : "/domain/myView", model:[listProducts: listProducts])
}

当使用“each”和闭包时,“it”表示你在集合中看到的特定实例。

此处的一些示例:Examples of iteration over collections

答案 2 :(得分:0)

您想使用collect()代替each()

def createGraph(){
    def dailyProfit = DailyProfit.list().collect{ [ chartA:it.a + it.b, chartB:it.c ] }
    render dailyProfit as JSON
}