我的服务器上有一个字符串列表,我试图以数组的形式访问客户端。我试图使用的代码如下:
在jsp中我有一个List<String>
列
我正在尝试以下代码:
<%int j = 0; %>
for(var i = 0; i < <%=columns.size()%>; i++)
{
colArray[i] = "<%=columns.get(j++)%>";
}
此代码只返回colArray中每个元素的列列表中的第一个元素。
我也尝试过:
colArray = <%=columns.toArray()%>;
也不起作用。 我觉得我在某个地方犯了一个小错误,我只是没有看到它。我试图以我尝试的方式做的事情是什么?
感谢。
答案 0 :(得分:13)
您将获得在服务器上执行的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次攻击。
答案 1 :(得分:6)
答案 2 :(得分: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>
这只是一种方法,您还可以通过在[
和]
中嵌入服务器代码来“动态”构建输出。我使用此示例尝试演示构建包含客户端JavaScript的字符串并将其输出到浏览器之间的分离。
答案 3 :(得分:3)
Exp语言:
colArray = ${columns}
答案 4 :(得分:2)
上面发布的解决方案在我的情况下不起作用,我需要一个额外的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;
<%}
}%>
答案 5 :(得分:2)
对我来说,这个解决方案已经奏效了。首先,您应该创建一个JSONArray并使用它的toJSONString()方法。此方法将列表转换为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类 - 它有列表字段 - 在JSP页面中。)