将 ArrayList 传递给 JQuery Flot
Pass ArrayList to JQuery Flot
下午好。
英语不是我的母语,所以请耐心等待。
我是 [see tags] 的初学者并且有一个网络应用程序收集日期和序列以进行 sql 查询和 return 一些数据(来自度量值和测量日期)到动作 doDrawFlot,在动作中,此数据被格式化以填充浮点图。
我需要一个 ArrayList<(String or Integer)> 并将其传递给 Javascript 以填充浮点图。
此刻我有我的Action:
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 中,这是因为我正在使用输入流来传递数据客户端。
要像数组一样传递数据并在 flot 中正确格式化是绝对必要使用Json(或 Gson)?
或者我当前的构建可以完成这项工作?
任何想法(代码修复、POJO、新手的简单教程)或建议?
我正在使用 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”)
如您所见,您的 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"]]
下午好。
英语不是我的母语,所以请耐心等待。
我是 [see tags] 的初学者并且有一个网络应用程序收集日期和序列以进行 sql 查询和 return 一些数据(来自度量值和测量日期)到动作 doDrawFlot,在动作中,此数据被格式化以填充浮点图。
我需要一个 ArrayList<(String or Integer)> 并将其传递给 Javascript 以填充浮点图。
此刻我有我的Action:
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 中,这是因为我正在使用输入流来传递数据客户端。
要像数组一样传递数据并在 flot 中正确格式化是绝对必要使用Json(或 Gson)?
或者我当前的构建可以完成这项工作?
任何想法(代码修复、POJO、新手的简单教程)或建议?
我正在使用 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”)
如您所见,您的 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"]]