2016-02-25 130 views
2

下午好。将ArrayList传递给JQuery Flot

英语不是我的母语,请耐心等待。

我在[见标签]初​​学者,有一个Web应用程序,它收集的日期和序列,使一个SQL查询和(从度量和测量的日期值)返回一些数据到行动doDrawFlot,在这个动作中,这个数据被合成为填充一个flot图。

我需要一个ArrayList <(字符串或整数)>并将它传递给Javascript来填充海军报曲线图。

在这一刻我有我的行动:

public InputStream inputStream; 

    public String doDrawFlot() { 

     StringBuilder response = new StringBuilder(); 

     response.append("1_20"); 
     response.append("2_50"); 
     response.append("3_10"); 

     byte[] bArray = response.toString().getBytes(); 
     inputStream = new ByteArrayInputStream(bArray); 

     return SUCCESS; 
    } 

Struts2的XML

<action name="GetProfile" class="com.raspberry.struts.action.PerfilCargaAction" 
     method="doDrawFlot"> 
    <interceptor-ref name="SessionValidationStack" /> 
    <result type="stream"> 
     <param name="contentType">text/html</param> 
     <param name="inputName">inputStream</param> 
    </result>    
</action> 

和JavaScript文件:

$(document).ready(function() { 
    //Re-load records when user click 'load records' button. 
    $('#LoadRecordsButton').click(function (e) { 
     $.ajax({ 
     type: 'POST', 
     url: 'GetProfile?fechaPerfil='+$('#startDate').datepicker({ dateFormat: 'yyyy-mm' }).val()+'&meter=' + $('#meterList option:selected').text(), 

     success: function (response) { 
console.log(response); //At request of @Raidri 
      var servletResponse = response; 

      var str = []; 
      var num = []; 
      var d1 = []; 

      for (var i = 0, len = servletResponse.length; i < len; i++) { 

       num.push(parseInt(servletResponse[i].split("_")[0])), 
       str.push(parseInt(servletResponse[i].split("_")[1])); 
       d1[i] = [num[i],str[i]];  
      } 
console.log(d1); //At request of @Raidri 
      $.plot($("#placeholder"), [d1]); 
     } 
     });  
     }); 
    $.plot($("#flotDiv"), [[]]);     
}); 

正如你所看到的数据是不在ArrayList中,这是因为我正在使用inputstream传递数据客户端。

要传递数据就像数组和格式正确在flot是绝对必要使用Json(或Gson)?

或者我目前的版本可以完成这项工作吗?

任何想法(代码修复,POJO,简单教程为noob)或recomendations?

我正在使用struts2和mykong tutorial没有帮助我。

更新:

在@Raidri的请求两个控制台日志的输出:

的console.log(响应):1_202_503_10

的console.log(D1):[1,NaN][NaN,NaN][2,NaN][0,NaN][2, NaN][NaN,NaN][5,NaN][0,NaN][3,NaN][NaN,NaN][1,NaN][NaN,0]

流发送一个单独的字符串,我需要一个数组,因为这些措施的长度可以改变(即,“102”或“0”)

+0

请插入'的console.log (响应)'在成功回调函数和'的console.log(D1)的开始'前'$ .plot()'调用,然后将结果添加到您的答案。 – Raidri

+0

@Raidri感谢您的评论,问题更新。 –

回答

1

正如你所看到的你的d1数组无效。和原来的数据串所需要的数据点之间有些隔膜,例如

response.append("1_20;"); 
... 

// response = "1_20;2_50;3_10" 

然后我们可以使用map()功能来构建我们的数据数组是这样的:

d1 = response.split(';').map(function (datapoint) { 
    return datapoint.split('_'); 
}); 

// d1 = [["1", "20"], ["2", "50"], ["3", "10"]] 
+0

你的答案被最有用,但不会处理数组。 尽管如此,我仍然能够正确地绘制我的数据,并在答案中找到一些“解决方法”。如果没有其他人回答数组的方法,我会接受你的答案。 再次感谢。 –

+0

谢谢Raidri。你的回答帮助我设法拥有两个“Yaxis”,并正确显示数据与时间的关系。 –