将数字数组从jsp服务器端传递到javascript客户端

时间:2013-09-23 16:51:17

标签: jsp

我是javascript的初学者,我不知道如何在java中编程,并且尝试理解servlet一直很难。我所理解的是如何创建一个jsp页面,它向Postgres 9.2数据库提交一个复杂的查询,并将结果行返回给html,然后我在客户端的iframe中显示。我想要做的是在同一个jsp页面中获取相同的结果行,并将它们发送到客户端javascript上的数组,以便我可以在flot中绘制数据图表。如果我可以让这个工作也许这样可以省去我试图理解java和serlets的麻烦,并且会使我的绘图更容易,因为图形将准确地描绘每次查询更改时查询返回的内容。我不想更多地查询数据库。我之前在这里读过,不建议使用jsp除了打印html以外的东西,但根据这篇文章Populating JavaScript Array from JSP List 我可能能够将结果行打印到一个数组,并将其提供给客户端的javascript。但是我无法让客户端看到数组变量,我确信我有一些缺失并且不理解一些基本的东西。

我从查询结果中使用“c:forEach”和“c:out”打印到html中的行如下所示:

"Jan"   1   1426.50   472.65
"Feb"   2   1449.00   482.10
"Mar"   3   1459.50   485.55
"Apr"   4   1470.00   489.00
"May"   5   1480.50   492.45
"Jun"   6   1491.00   495.90
"Jul"   7   1489.50   493.35
"Aug"   8   1512.00   502.80
"Sep"   9   1510.50   500.25
"Oct"   10  1533.00   509.70
"Nov"   11  1543.50   513.15
"Dec"   12  1542.00   510.60

根据我在该链接中的理解,我应该能够使数组看起来像这样:

var withdraw_v = [[ 1.0, 1426.50],[ 2.0, 1449.00],[ 3.0, 1459.50],[ 4.0, 1470.00],[ 5.0, 1480.50],[ 6.0, 1491.00],[ 7.0, 1489.50],[ 8.0, 1512.00],[ 9.0, 1510.50],[ 10.0, 1533.00],[ 11.0, 1543.50],[ 12.0, 1542.00]];

在我的jsp文件中使用此代码:

<sql:query var="rs" dataSource="jdbc/medford">
    My sql query goes here
</sql:query>

<script type="text/javascript">
  var withdraw_v = [
    <c:forEach var="row" items="${rs.rows}" varStatus="status">
  [ <c:out value="${row.Month_num}"/>, <c:out value="${row.Average_Withdrawals}"/>]
  <c:if test="${not status.last}">,</c:if>
  </c:forEach>
    ];
</script>

在我的html / javascript文件中,我尝试使用数组绘制我的数据:

$.plot("#plot", withdraw_v);

但它返回withdraw_v变量未定义。 我确定我错了。任何人都可以指出可能使这项工作吗?我已经尝试过关于google-gson的阅读,但我也不了解它,或者它是否会在这种情况下帮助我。

1 个答案:

答案 0 :(得分:0)

我通过认识到你是否有一个调用jsp页面的起始html页面来解决我的问题,并且jsp页面查询数据库并返回结果集,你不能再以某种形式将这些结果发送回原始html页面与原始html页面上的javascript交互。

相反,我使用html页面调用jsp页面,然后将数据库结果返回到一个新的html页面,该页面插入到原始页面上的iframe中。邮政图表在iframe中正确绘制。