【问题标题】:JSP, JavaScript, and Java ObjectsJSP、JavaScript 和 Java 对象
【发布时间】:2010-12-07 04:25:24
【问题描述】:

我有一个 JSP,我在其中使用 javascript 框架使用 Google 可视化 API 构建图表。

我的 servlet 正在返回一个销售 hashmap 对象,其中 year 作为键,整数(销售数字)作为值。

我的 javascript 使用销售对象将数据添加到构建我的图表的 Google 图表 API。 代码:

sales = '<%= session.getAttribute("sales") %>';

我的 js 中的 sales 对象获取了 hashmap,但它是一个长字符串。我是否必须在我的 javascript 中解析它,还是有办法自动将 hashmap 对象正确放入 javascript 销售对象中?

【问题讨论】:

    标签: java javascript jsp servlets


    【解决方案1】:

    您不需要使用外部 json 库(但您可以!) - 您可以将 json 直接打印到 javascript 变量中,例如:

    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
    <script>
    (function(){
       var sales = {
       <c:forEach var="entry" items="${requestScope['sales'].entrySet}" varStatus="counter">
          '${entry.key}' : ${entry.value} //outputs "2000" :1234 ,
          <c:if test="${!counter.last}">, </c:test>
       </c:foreach>
       };
       //js code that uses the sales object
       doStuffWith(sales);
    })()
    </script>
    

    【讨论】:

    • 首先最好返回 JSON 字符串而不是 Map。我喜欢这样。这也很好。 +1
    • 返回 JSON 字符串的问题在于,您将数据的表示与控制器中数据的计算联系在一起。返回地图的优势在于下一层可以将其转换为更适合客户端的内容(假设地图是可用于在控制器层和视图层之间进行通信的通用数据结构)。
    【解决方案2】:

    Java 和 Javascript 是完全不同的语言。 Javascript 不知道如何处理 Java HashMap 对象(实际上在您的示例中,您将获得 HashMap.toString() 的输出)。您必须将其序列化为 Javascript 可以理解的某种形式,例如。 JSON。

    【讨论】:

    • 首先最好返回 JSON 字符串而不是 Map。我喜欢这样。用 JavaScript 做也很好。 +1
    【解决方案3】:

    尝试使用JSON,这将允许您在 json(java script object notation)中描述您的 Java 对象,这样您就可以将描述的对象直接加载到 javascript 中。

    【讨论】:

    • 是的,我也喜欢这样。首先,最好返回 JSON 字符串而不是 Map。 +1
    【解决方案4】:

    所有这段代码

    sales = '<%= session.getAttribute("sales") %>';
    

    session.getAttribute("sales") 的值打印到 HTML 输出。如果没有关于如何格式化输出的任何逻辑,Java 只会在该对象上调用 .toString() - 默认实现(除非您覆盖它)通常会导致输出看起来像 classname@1234abc12

    所以简短的回答是,是的,您需要在 Java 端添加一些逻辑,以了解您希望如何将对象/数据结构输出到 HTML 文档中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多