如何使用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代码(最突出的引号)的字符串中的任何内容 – 特别是如果它们包含用户生成的内容。 否则,您将使应用程序对跨站点脚本和跨站点请求伪造攻击敞开大门 。
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页面中。)