【问题标题】:Iterate hashmap stored in Model in javascript在javascript中迭代存储在模型中的hashmap
【发布时间】:2017-05-13 20:36:49
【问题描述】:

在尝试通过传递 key 在 javascript 函数中迭代地图时,如下所示:

        <html> <head> 
    <script type="text/javascript"> 
    function demo(tmp){ 
    <c:forEach var="user" items="${usermap}"> 
    <c:out value="${usermap.get(\"+'tmp'+\").name}"></c:out>    
    </c:forEach>    
    } 
    </script> 
<title>Insert title here</title> </head>
 <body> 
<h1 onclick="demo('user1')">User VO</h1> 
<c:forEach var="user" items="${usermap}"> 
 Key: ${user.key}  - Name: ${user.value.name} - Id: ${user.value.userid}<br/><br/> 
</c:forEach> 
</body> </html>

我得到空白值。但是当我硬编码 key***user1*** 的值时,它可以工作。

Servlet 代码 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 自动生成的方法存根

    //System.out.println("in servlet doGet:"+ ++count);
    UserVO user1= new UserVO("Y","701");
    UserVO user2= new UserVO("D","834");


    hmap.put("user1", user1);
    hmap.put("user2", user2);
    //hmap.values()
    request.setAttribute("usermap", hmap);
    //response.sendRedirect("User.jsp");
    RequestDispatcher view = request.getRequestDispatcher("User.jsp");
    view.forward(request, response);
    //response.getWriter().append("Served at: ").append(request.getContextPath());
}

有人可以帮我吗?

【问题讨论】:

  • 这一点都不清楚。你说的“模型”是什么?为什么这个问题被标记为el
  • 它是一个模型属性..我们已经将 servlet 中的 serviceProfile 属性设置为
  • model.addAttribute("serviceProfile", serviceProfile);
  • 我认为你应该弄清楚你正在使用什么语言(我认为是 Java)以及这些 sn-ps 的上下文是什么。那些是在服务器端生成的吗?你打算如何使用Cfs_id
  • 我正在使用java。首先,用户选择像 Airtel-01 这样的 serviceId,它作为参数传递给虚拟方法。我正在检查 Map 中的相同 serviceId 并将其进一步发送到 javascript 中的另一个函数。我面临的问题是将 serviceId 传递给 get 方法。 var Cfs_id="${serviceProfile.serviceIdMap.get(serviceId).Id}";传递 serviceId 时语法有问题。希望现在很清楚。

标签: javascript el


【解决方案1】:

问题:

您正在混合客户端和服务器端代码。 JavaScript 和 JavaServer Pages 是分开执行的。

  • JSP代码在服务器上编译,
  • 结果是一个 HTML,它被传送到浏览器
  • 在浏览器中执行 JavaScript

所以 JSP 相关的东西,比如:

  • JSTL、JSP 标准标签库(标签如&lt;jsp:something&gt;&lt;c:something&gt;
  • JSP-EL,表达式语言(${something} 等字符串)

在服务器上处理。

您可以通过在 Firefox/Chrome 中按 Ctrl+U 来查看浏览器中接收到的 HTML 代码。

在你的情况下:

选择标签中的选项在浏览器的客户端执行。
EL 评估为时已晚。 EL 已评估 bean。
您可以根据用户的选择使用ajax 来请求所需的数据(地图)。

编辑

硬编码行的 EL 在服务器上执行并替换为值。在另一种情况下,当涉及 select-tag 时,EL 在服务器上执行并替换为var Cfs_id ="";。因此虚拟函数忽略参数 serviceId 并将变量始终设置为空字符串。

在浏览器中查看代码。只有 Html 和 Javascript。 JSP EL 不再存在。

【讨论】:

  • 谢谢。我明白这一点。但是当我硬编码 serviceId 的值时,我怎么会从同一张地图中获取值,即 var Cfs_id="${serviceProfile.serviceIdMap.get("airtel") .Id}”。
  • 我已经更新了原代码。添加了 servlet 和 jsp 代码。页面渲染完成后,map 还在 request obj 中。唯一的问题是我无法获得密钥。您可以尝试运行此代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多