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

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

在jsp中我有一个List

我正在尝试以下代码:

  for(var i = 0; i < ; i++) { colArray[i] = ""; } 

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

我也尝试过:

 colArray = ; 

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

谢谢。

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

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

 <% for (int i=0; i colArray[<%= 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的字符串并将其输出到浏览器之间的分离。

Exp语言:

 colArray = ${columns} 

上面发布的解决方案在我的情况下不起作用,我需要一个额外的Javascript变量来进行转移:

 var codesJS=new Array(); <% String[] codes=(String[])request.getAttribute("codes"); if(codes!=null){ for(int i=0; i var code='<%= codes[i] %>'; //--> without this doesnt work codesJS[<%= i %>]=code; <%} }%> 

对我来说这个解决方案很有效。 首先,您应该创建一个JSONArray并使用它的toJSONString()方法。 此方法将列表转换为JSON文本。 它的结果是一个JSON数组。

 <% List exampleList = new ArrayList<>(); exampleList.add("Apple"); exampleList.add("Orange"); exampleList.add("Lemon"); JSONArray fruitList = new JSONArray(); fruitList.addAll(exampleList); %> 

在JSP页面中,您应该调用列表的toJSONString()方法,并将JSON文本传递给JavaScript数组。

  

(可选)您可以为列表创建一个简单的getter方法。如果您只是实例化JAVA类 – 它有列表字段 – 在JSP页面中。)