【问题标题】:How to access java.util.List session from javascript?如何从 javascript 访问 java.util.List 会话?
【发布时间】:2013-07-03 21:06:20
【问题描述】:

在java中我的代码是,

List abcList;   
request.getSession().setAttribute("abc", abcList);

我想用 javascript 访问这个列表,

var myVariable='<%=(List)session.getAttribute("abc")%>';

我没有在 javascript 中获取 list(abcList) 值......

【问题讨论】:

  • 你有看过生成的源码吗?您需要发出合法、合理的 JavaScript。
  • 它给了我不合适的输出(package.subpackage....),但它能够检测到列表大小!

标签: java javascript session


【解决方案1】:

您需要将您的列表序列化为 Javascript 对象。有图书馆可以为你做这件事:https://stackoverflow.com/questions/338586/a-better-java-json-library

【讨论】:

    【解决方案2】:

    你不能那样做。您必须通过迭代 Java 列表来创建列表。你可以试试这样的...

    var myVar = [];
    <%
    List list = (List)session.getAttribute("abc");
    for(int i = 0; i < list.size(); ++i){
        out.println("myVar.push('" + list[i] + "');");
    }
    %>
    

    【讨论】:

    • list[i] 给我错误:'表达式的类型必须是数组类型,但它解析为 List'
    • @RohitKKK Mohkhan 混淆了数组和列表。使用普通的 Java 5+ for/each 语法。列表值也必须是 JS 转义的。就我个人而言,我会使用 &lt;c:forEach&gt; 而不是 scriptlet,后者已被推荐了近十年。更好的是,使用 JSON 库。
    【解决方案3】:

    究竟想要达到什么目的? 请记住,javascript 将在客户端浏览器上执行,而 java 代码将在服务器上。所以你不应该从 javascript 中引用 java 变量。而是使用 jsp 标记,您只能在服务器上的加载时间获取列表。

    【讨论】:

    • 我在第一次加载页面时调用了一个函数,所以从jsp调用变量没有帮助,我想要这个东西进行分页,因为我想要我所在的java代码的完整列表设置会话。
    【解决方案4】:

    您必须编写将列表打印为 javascript 数组的代码。这可能只是导致

    var myVariable='ArrayList@123455'
    

    但你需要的是

    var myVariable = ["element1", "element2, ...]
    

    使用 json 序列化库。那些为你打印的。或者写个json打印机,其实挺直接的^^。

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多