代码之家  ›  专栏  ›  技术社区  ›  kgrad

如何使用JSP将Java数组转换为JavaScript数组?

  •  9
  • kgrad  · 技术社区  · 17 年前

    我的服务器上有一个字符串列表,我正试图以数组的形式访问客户机。我尝试使用的代码如下:

    在JSP中,我有一个 List<String> 柱

    我正在尝试以下代码:

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

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

    我也尝试过:

    colArray = <%=columns.toArray()%>;
    

    也不起作用。 我觉得我在某个地方犯了一个小错误,只是看不见而已。我试图做的事情是否可能以我正在尝试的方式发生?

    谢谢。

    6 回复  |  直到 11 年前
        1
  •  13
  •   Michael Borgwardt    17 年前

    在服务器上执行的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 攻击。

        2
  •  6
  •   perrohunter    17 年前

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

    在这里看看

    http://www.json.org/java/index.html

        3
  •  5
  •   Grant Wagner    17 年前

    一旦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的字符串和将其输出到浏览器之间的分离。

        4
  •  3
  •   j0k gauthamp    14 年前

    EXP语言:

    colArray = ${columns}
    
        5
  •  2
  •   Aboutblank RiaD    13 年前

    上面发布的解决方案在我的案例中不起作用,我需要一个额外的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; 
        <%}
    }%>
    
        6
  •  0
  •   F3R1    11 年前

    对我来说,这个解决方案已经奏效了。首先,您应该创建一个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类——它具有列表字段-int的JSP页。

    推荐文章