¿Cómo obtener valores en jsp usando jstl de hashmap sin iteración?

soy un novato tengo un mapa hash declarado como

 HashMap map = new HashMap();

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

y estoy pasando este mapa en mi controlador modelandview así

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

cómo acceder al código de valores, evaluaciónTSRCode en jsp usando jstl sin usar la iteración. Intenté así pero no pude obtener los valores.

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

por favor ayúdenme a resolver este problema

Gracias por adelantado

preguntado el 22 de mayo de 12 a las 12:05

intente acceder a él por ${map['Key']} -

@kunal sí está funcionando gracias -

2 Respuestas

La forma en que accede a los valores del mapa en JSP es totalmente incorrecta.

Hay una suposición de mi parte en su código

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

está mal debería ser

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

No necesita iterar a través de los valores del mapa.

P.ej. Para acceder al valor del código. ${map.code} en jsp en cualquier lugar sería suficiente.

O puedes usar como

return new ModelAndView("purchaseProduct", map);

y cuando hace esto en JSP, solo necesita acceder al valor del mapa solo por su nombre.

P.ej. Para acceder al valor del código. ${code} en jsp en cualquier lugar sería suficiente.

Espero que esto ayude.

Saludos.

contestado el 22 de mayo de 14 a las 10:05

sí, está funcionando, pero puedo acceder a los valores del mapa como ${map.code} o ${map['code']}... entonces solo obtiene el valor: anto

para acceder a mi código de valores de mapa, url en jsp ustil jstl, necesito usar este formato ${map.code} o ${map['code']} para obtener el valor de 'key'(code) en el mapa en jsp. - anto

Ohhk. Ahora entiendo tu verdadero problema. Está agregando su mapa en el modelo y lo ve abyecto incorrectamente. Intente usar lo siguiente. return new ModelAndView("purchaseProduct", map); Y después de eso en tu jsp solo necesitas acceder como ${código}. Apuesto a que ahora esto funcionará con seguridad. :-)- Japón Trivedi

De nada. Espero que ahora estés satisfecho con la respuesta. :-)- Japón Trivedi

Creo que una respuesta un poco más correcta sigue usando el mapa como se sugiere, pero agregándolo al ModelMap, declarado en la entrada del método del controlador y devolviendo solo la cadena con el nombre de la vista (siempre uso esta forma para referir vistas en el controlador de primavera ):

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

De esta forma, puede usar ${map.code} en su jsp.

Más interesante aún, si es necesario, puede empaquetar una estructura de datos compleja en un mapa y luego en una lista

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

De esta manera, en el jsp, podría iterar cada elemento de la lista, etiquetado como lcli, que es un mapa, desde el cual recoger sus claves/valores como se dice, como se muestra a continuación.

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

Respondido 01 Abr '16, 08:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.