如何使用jsp将java数组传递给javaScript数组?
我有我的服务器上的字符串列表,我试图以数组的形式到达客户端。我试图使用的代码如下:如何使用jsp将java数组传递给javaScript数组?
在jsp中我有一个List<String>
列
我试图下面的代码:
<%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; i<columns.size(); i++) { %>
colArray[<%= i %>] = "<%= columns.get(i) %>";
<% } %>
我的JSP技术是生锈,和语法可能会有所不同,但我希望你的想法。
编辑:正如在评论中指出的,你必须要非常小心逃避那些字符串任何可能导致它们被解释为JavaScript代码(最突出引号) - 特别是如果它们包含用户生成的内容。否则,您会将您的应用全部打开为Cross-site scripting和Cross-site request forgery攻击。
JavaScript到达客户端后,服务器代码已停止执行。服务器代码不会与客户端代码“并行”执行。
你必须建立整个的JavaScript初始化在Java和发送,完整的可执行文件,到客户端:
<%
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>
这仅仅是一个办法做到这一点,你也可以建立输出“上通过将服务器代码嵌入到[
和]
中来实现“飞行”。我使用这个例子试图展示构建包含客户端JavaScript的字符串并将其输出到浏览器之间的分离。
精通语言:
colArray = ${columns}
上面提到的解决方案在我的情况下不起作用,我需要一个额外的Javascript变量来完成传输:
var codesJS=new Array();
<% String[] codes=(String[])request.getAttribute("codes");
if(codes!=null){
for(int i=0; i<codes.length; i++){ %>
var code='<%= codes[i] %>'; //--> without this doesnt work
codesJS[<%= i %>]=code;
<%}
}%>
对我来说,这个解决方案已经工作。首先,你应该制作一个JSONArray,并将其用于JSONString()方法。此方法将列表转换为JSON文本。它的结果是一个JSON数组。
<%
List<String> exampleList = new ArrayList<>();
exampleList.add("Apple");
exampleList.add("Orange");
exampleList.add("Lemon");
JSONArray fruitList = new JSONArray();
fruitList.addAll(exampleList);
%>
在JSP页面中,你应该调用列表的toJSONString()方法和JSON文本传递到JavaScript数组。
<script type="text/javascript"> var fruitArray = <%= fruitList.toJSONString() %>;</script>
(可选你可以做的名单一个简单的getter方法的情况下,如果你只实例化的Java类 - 它具有列表字段 - INT JSP页面)
这不会,如果工作这些字符串包含诸如双引号,反斜线或换行符等字符。这些角色将需要逃脱。 – 2009-02-05 16:42:11
我还会在第二行的末尾添加一个分号。 – 2009-02-05 16:43:16