2013-06-18 25 views
1

我是新来的google.visualization.datasource,我想知道是否有一个简单的例子,用一个助手类创建数据表并返回给客户端,但没有使用查询和DataSourceServlet ??因为我已经通过spring mvc控制器实现了我的http请求。春天mvc 3和谷歌datatable

我想实现下面的例子:https://developers.google.com/chart/interactive/docs/dev/dsl_get_started

这里是我的代码:

@Controller 
public class DBcontroller { 
private SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 


@SuppressWarnings({ "rawtypes", "unchecked" }) 
@RequestMapping(value = "/getHistoricalData", method = {RequestMethod.POST,RequestMethod.GET}) 
public @ResponseBody DataTable setLampsRequest(@RequestParam String Lampid 
     , @RequestParam String StartDate, @RequestParam String EndDate) throws ParseException{ 

    //converting time values to long 
    Long start = formater.parse(StartDate).getTime(); 
    Long end = formater.parse(EndDate).getTime(); 

    // Create a data table, 
    DataTable data = new DataTable(); 
    ArrayList cd = new ArrayList(); 
    cd.add(new ColumnDescription("name", ValueType.TEXT, "Animal name")); 
    cd.add(new ColumnDescription("link", ValueType.TEXT, "Link to wikipedia")); 
    cd.add(new ColumnDescription("population", ValueType.NUMBER, "Population size")); 
    cd.add(new ColumnDescription("vegeterian", ValueType.BOOLEAN, "Vegetarian?")); 

    data.addColumns(cd); 

    // Fill the data table. 
    try { 
     data.addRowFromValues("Aye-aye", "http://en.wikipedia.org/wiki/Aye-aye", 100, true); 
     data.addRowFromValues("Sloth", "http://en.wikipedia.org/wiki/Sloth", 300, true); 
     data.addRowFromValues("Leopard", "http://en.wikipedia.org/wiki/Leopard", 50, false); 
     data.addRowFromValues("Tiger", "http://en.wikipedia.org/wiki/Tiger", 80, false); 
    } catch (TypeMismatchException e) { 
     System.out.println("Invalid type!"); 
    } 


    return data; 
} 

} 

预先感谢您的任何帮助表示赞赏。

+0

问题,什么你在运行?你有什么尝试?单独创建dataTable没有任何问题,只要最终的格式可以通过Google Visualization以JS对象的形式进行读取即可。因此,如果它是一个适当的对象,那么将它用作数据源应该不会对创建图表造成任何问题。你的问题究竟在哪里? – jmac

+0

@jmac我试图通过google.gson转换为JSON对象 当我在浏览器中收到它并从它制作google.Visualization.Datatable并尝试绘制它时,我在控制台中得到此错误: 'Uncaught TypeError :对象#没有方法'getNumberOfColumns')' –

回答

1

可以使用JsonRenderer写的数据表为JSON:

@RequestMapping(value = "/getHistoricalData", method = {RequestMethod.POST,RequestMethod.GET}) 
public @ResponseBody void setLampsRequest(
      @RequestParam String Lampid, 
      @RequestParam String StartDate, 
      @RequestParam String EndDate, 
      Writer output, 
      HttpServletRequest request) { 

    //converting time values to long 
    Long start = formater.parse(StartDate).getTime(); 
    Long end = formater.parse(EndDate).getTime(); 

    // Create a data table, 
    DataTable data = new DataTable(); 
    ArrayList cd = new ArrayList(); 
    cd.add(new ColumnDescription("name", ValueType.TEXT, "Animal name")); 
    cd.add(new ColumnDescription("link", ValueType.TEXT, "Link to wikipedia")); 
    cd.add(new ColumnDescription("population", ValueType.NUMBER, "Population size")); 
    cd.add(new ColumnDescription("vegeterian", ValueType.BOOLEAN, "Vegetarian?")); 

    data.addColumns(cd); 

    // Fill the data table. 
    try { 
     data.addRowFromValues("Aye-aye", "http://en.wikipedia.org/wiki/Aye-aye", 100, true); 
     data.addRowFromValues("Sloth", "http://en.wikipedia.org/wiki/Sloth", 300, true); 
     data.addRowFromValues("Leopard", "http://en.wikipedia.org/wiki/Leopard", 50, false); 
     data.addRowFromValues("Tiger", "http://en.wikipedia.org/wiki/Tiger", 80, false); 
    } catch (TypeMismatchException e) { 
     System.out.println("Invalid type!"); 
    } 
    PrintWriter writer = new PrintWriter(output); 
    writer.println(JsonRenderer.renderDataTable(data, true, false, false)); 
    writer.close(); 
}