如何在没有迭代的情况下使用hashmap中的jstl获取jsp中的值?

时间:2012-05-22 11:55:31

标签: java model-view-controller jsp spring-mvc jstl

我是新手,我有一个声明为

的哈希映射
 HashMap map = new HashMap();

    map.put("code", code);
    map.put("url", evaluationTSRCode);

和iam在我的modelandview控制器中传递这张地图

return new ModelAndView("purchaseProduct","map","map"); 

如何在不使用迭代的情况下使用jstl访问jsp中的值代码,evaluateTSRCode 我尝试这样但我无法获得价值。

<c:choose>
<c:when test="(${map.code} != null && ${map.code}=!"" )" >
<td>You can purchase<a href='<c:url value="${map.url}"/>'>Directly</a></td>
</c:when>
<c:otherwise>
td>You can purchase Directly</td>
</c:otherwise>
</c:choose>

请帮我解决这个问题

提前致谢

2 个答案:

答案 0 :(得分:4)

您在JSP中访问地图值的方式是完全错误的。

我的代码中有一个假设

return new ModelAndView("purchaseProduct","map","map");

错误应该是

return new ModelAndView("purchaseProduct","map",map);

您无需遍历地图值。

EG。访问代码的值。在jsp中的${map.code}就足够了。

或者你可以使用

return new ModelAndView("purchaseProduct", map);

当您在JSP中执行此操作时,您只需要按名称访问地图值。

EG。访问代码的值。在jsp中的${code}就足够了。

希望这会对你有所帮助。

干杯。

答案 1 :(得分:0)

我认为答案更正确仍然是按照建议使用map,但是将它添加到ModelMap中,在控制器方法的输入中声明并仅返回带有视图名称的字符串(我总是使用这种方式来引用视图在春季控制器):

public String themethod(ModelMap model) {
  ...
  model.addAttribute("map",map);
  return "purchaseProduct";

通过这种方式,您可以在jsp中使用$ {map.code}。

更有趣的是,如果需要,您可以将复杂的数据结构打包在地图中,然后打包在列表中

  List<Map<String, Object>> lcli = new ArrayList<Map<String, Object>>();
  for(Cliente c:cli) {
        Map <String,Object>map  = new HashMap<String, Object>();
        int nord    = userDao.nord(c);
        map.put("cli", c);
        map.put("nord", nord);

        lcli.add(map);
    }
    mo.addAttribute("lcli", lcli);

这样在jsp中你可以迭代列表中的每个元素,标记为lcli,它是一个地图,从中获取其键/值,如下所示

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:forEach var="itemcli" items="${lcli}">
        <a href="<c:url value='edit-client.html?id=${ itemcli.cli.id }'/>" >   ${itemcli.cli.nome}  </a>            
        ${itemcli.cli.citta}
</c:forEach>