0

我是一个新手我有一个哈希映射声明为

 HashMap map = new HashMap();

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

我正在像这样在我的模型和视图控制器中传递这张地图

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

如何在不使用迭代的情况下使用 jstl 在 jsp 中访问值代码、评估 TSRCode 我尝试这样但我无法获取值。

<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>

请帮我解决这个问题

提前致谢

4

2 回答 2

4

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

在您的代码中,我有一个假设

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

是错的,应该是

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

您不需要遍历地图值。

例如。访问代码的值。${map.code}在任何地方的jsp就足够了。

或者你可以使用像

return new ModelAndView("purchaseProduct", map);

当您在 JSP 中执行此操作时,您只需要通过其名称访问映射值。

例如。访问代码的值。${code}在任何地方的jsp就足够了。

希望这对您有所帮助。

干杯。

于 2012-05-22T12:42:55.943 回答
0

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

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>                          
于 2016-04-01T07:34:07.343 回答