如何使用jsp将java数组传输到javaScript数组?

kgr*_*rad 9 javascript java arrays jsp

我在我的服务器上有一个字符串列表,我试图以数组的形式到达客户端.我试图使用的代码如下:

在jsp中我有一个List<String>

我正在尝试以下代码:

<%int j = 0; %>
for(var i = 0; i < <%=columns.size()%>; i++)
{
  colArray[i] = "<%=columns.get(j++)%>";
}
Run Code Online (Sandbox Code Playgroud)

此代码只返回colArray中每个元素的列列表中的第一个元素.

我也尝试过:

colArray = <%=columns.toArray()%>;
Run Code Online (Sandbox Code Playgroud)

这也不起作用.我觉得我在某个地方犯了一个小错误,我只是没有看到它.我试图以我尝试的方式做的事情是什么?

谢谢.

Mic*_*rdt 13

您将获得在服务器上执行的JSP代码与在客户端上执行的JavaScript代码混淆.该片段<%=columns.get(j++)%>在服务器上执行一次,此时围绕它的JavaScript循环无关紧要.当它到达客户端时,循环的主体只是说colArray[i] = "first entry";当然将相同的字符串放入数组的每个元素中.

你需要做的是在服务器上执行循环,如下所示:

<% for (int i=0; i<columns.size(); i++) { %>
colArray[<%= i %>] = "<%= columns.get(i) %>"; 
<% } %>
Run Code Online (Sandbox Code Playgroud)

我的JSP技能很生疏,语法可能不同,但我希望你能得到这个想法.

编辑:正如评论中指出的那样,你需要非常小心地逃避那些可能导致它们被解释为JavaScript代码(最突出的引号)的字符串中的任何内容 - 特别是如果它们包含用户生成的内容.否则,您将使应用程序对跨站点脚本跨站点请求伪造攻击敞开大门.


per*_*ter 6

尝试使用JSON(Javascript对象表示法)对数组进行编码并在javascript上解码它非常简单

看看这里

http://www.json.org/java/index.html


Gra*_*ner 5

JavaScript到达客户端后,服务器代码已停止执行.服务器代码不与客户端代码"并行"执行.

您必须使用Java构建整个JavaScript初始化并将其完整且可执行地发送到客户端:

<%
StringBuffer values = new StringBuffer();
for (int i = 0; i < columns.size(); ++i) {
    if (values.length() > 0) {
        values.append(',');
    }
    values.append('"').append(columns.get(i)).append('"');
}
%>
<script type="text/javascript">
var colArray = [ <%= values.toString() %> ];
</script>
Run Code Online (Sandbox Code Playgroud)

这仅仅是一个办法做到这一点,你也可以通过嵌入内部服务器代码建立"对飞"输出[].我使用此示例尝试演示构建包含客户端JavaScript的字符串并将其输出到浏览器之间的分离.