我在我的服务器上有一个字符串列表,我试图以数组的形式到达客户端.我试图使用的代码如下:
在jsp中我有一个List
列
我正在尝试以下代码:
<%int j = 0; %> for(var i = 0; i < <%=columns.size()%>; i++) { colArray[i] = "<%=columns.get(j++)%>"; }
此代码只返回colArray中每个元素的列列表中的第一个元素.
我也尝试过:
colArray = <%=columns.toArray()%>;
这也不起作用.我觉得我在某个地方犯了一个小错误,我只是没有看到它.我试图以我尝试的方式做的事情是什么?
谢谢.
您将获得在服务器上执行的JSP代码与在客户端上执行的JavaScript代码混淆.该片段<%=columns.get(j++)%>
在服务器上执行一次,此时围绕它的JavaScript循环无关紧要.当它到达客户端时,循环的主体只是说colArray[i] = "first entry";
当然将相同的字符串放入数组的每个元素中.
你需要做的是在服务器上执行循环,如下所示:
<% for (int i=0; icolArray[<%= i %>] = "<%= columns.get(i) %>"; <% } %>
我的JSP技能很生疏,语法可能不同,但我希望你能得到这个想法.
编辑:正如评论中指出的那样,你需要非常小心地逃避那些可能导致它们被解释为JavaScript代码(最突出的引号)的字符串中的任何内容 - 特别是如果它们包含用户生成的内容.否则,您将使应用程序对跨站点脚本和跨站点请求伪造攻击敞开大门.
尝试使用JSON(Javascript对象表示法)对数组进行编码并在javascript上解码它非常简单
看看这里
http://www.json.org/java/index.html
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('"'); } %>
这仅仅是一个办法做到这一点,你也可以通过嵌入内部服务器代码建立"对飞"输出[
和]
.我使用此示例尝试演示构建包含客户端JavaScript的字符串并将其输出到浏览器之间的分离.