如何使用jsp将java数组转换为javaScript数组?

如何使用jsp将java数组转换为javaScript数组?,java,javascript,arrays,jsp,Java,Javascript,Arrays,Jsp,我在服务器上有一个字符串列表,我正试图以数组的形式将其发送到客户端。我尝试使用的代码如下所示: 在jsp中,我有一个列表列 我正在尝试以下代码: <%int j = 0; %> for(var i = 0; i < <%=columns.size()%>; i++) { colArray[i] = "<%=columns.get(j++)%>"; } 对于(变量i=0;i var colArray=[]; 这只是一种方法,您还可以通过将服务器代

我在服务器上有一个字符串列表,我正试图以数组的形式将其发送到客户端。我尝试使用的代码如下所示:

在jsp中,我有一个
列表

我正在尝试以下代码:

<%int j = 0; %>
for(var i = 0; i < <%=columns.size()%>; i++)
{
  colArray[i] = "<%=columns.get(j++)%>";
}

对于(变量i=0;i<;i++)
{
colArray[i]=“”;
}
这段代码只是为colArray中的每个元素返回columns列表中的第一个元素

我也尝试过:

colArray = <%=columns.toArray()%>;
colArray=;
这也不起作用。 我觉得我在某处犯了一个小错误,只是看不见而已。我试图做的事情是否有可能以我正在尝试的方式实现


谢谢。

服务器上执行的JSP代码与客户端上执行的JavaScript代码混合在一起。代码片段
在服务器上执行一次,此时围绕它的JavaScript循环是不相关的。当它到达客户端时,循环的主体只是说
colArray[i]=“first entry”
这当然会将相同的字符串放入数组的每个元素中

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

<% for (int i=0; i<columns.size(); i++) { %>
colArray[<%= i %>] = "<%= columns.get(i) %>"; 
<% } %>

一旦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>
0){
附加(',');
}
values.append(“”).append(columns.get(i)).append(“”);
}
%>
var colArray=[];
这只是一种方法,您还可以通过将服务器代码嵌入
[
]
中来“动态”构建输出。我使用这个例子试图演示构建包含客户端JavaScript的字符串和将其输出到浏览器之间的分离。

尝试使用JSON(JavaScript对象表示法)对数组进行编码并在JavaScript上对其进行解码非常简单

看看这里

Exp语言:

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; 
    <%}
}%>
var codesJS=new Array();
没有这个就不行
codesJS[]=代码;

对我来说,这个解决方案已经奏效了。首先,您应该创建一个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>
var-groutarray=;

(可选地,您可以为列表创建一个简单的getter方法。如果您仅在JSP页面中实例化JAVA类(其中包含列表字段)。

如果字符串包含双引号、反斜杠或换行符,则此方法将不起作用。这样的字符需要转义。我还要在第二行末尾添加一个分号。“I”变量如何从js传递到java?这对数字列表很有用,字符串没有被
包围。“
看起来这个链接现在不可用。