Galera, tô precisando de uma ajuda aqui
Tenho uma lista de chaves do Map (na variável ciclos). E nessa lista eu pego a chave, e com a chave pego o valor correspondente no Map. Até ai beleza, fiz os foreach necessários, mas na hora de passar a chave, dá erro. Ele não entende o comando…coloquei abaixo o que tentei.
Se eu coloco o valor hard code, ele traz normal!
Segue código:
<c:forEach var="relatorio" items="${lista}" varStatus="loop">
<tr class="${((loop.index % 2) == 0) ? 'even' : 'odd'}">
<td align="center">${relatorio.codProduto}</td>
<c:forEach var="campanha" items="${ciclos}">
<td align="center">${relatorio.valorPorCiclo[${campanha.ciclo}]}</td>
</c:forEach>
</tr>
</c:forEach>
Tentei assim também e também não funcionou
<c:forEach var="relatorio" items="${lista}" varStatus="loop">
<tr class="${((loop.index % 2) == 0) ? 'even' : 'odd'}">
<td align="center">${relatorio.codProduto}</td>
<c:forEach var="campanha" items="${ciclos}">
<c:set var="i" value = "${campanha.ciclo}" />
<td align="center">${relatorio.valorPorCiclo[${i}]}</td>
</c:forEach>
</tr>
</c:forEach>
O Map declarado no java está assim Map<Long,Integer> (Tive que colocar Long, porque o JSTL se perde se coloco Integer) :?
Enfim, alguém já passou por isso? Podem me ajudar?
Valeu
Bom dia Javablue,
eu colocaria a lista ciclos dentro da lista de relatorio, dai quando você faz um foreach no relatório ele já contem a lista tipo assim:
<c:forEach var="relatorio" items="${lista}" varStatus="loop">
<tr class="${((loop.index % 2) == 0) ? 'even' : 'odd'}">
<td align="center">${relatorio.codProduto}</td>
<c:forEach var="campanha" items="${relatorio.ciclos}">
<td align="center">${campanha.ciclo}</td>
</c:forEach>
</tr>
</c:forEach>
[quote=rodrigocolasso]Bom dia Javablue,
eu colocaria a lista ciclos dentro da lista de relatorio, dai quando você faz um foreach no relatório ele já contem a lista tipo assim:
[code]
<c:forEach var=“relatorio” items="${lista}" varStatus=“loop”>
<tr class="${((loop.index % 2) == 0) ? ‘even’ : ‘odd’}">
<td align=“center”>${relatorio.codProduto}</td>
<c:forEach var=“campanha” items="${relatorio.ciclos}">
<td align=“center”>${campanha.ciclo}</td>
</c:forEach>
</tr>
</c:forEach>
[/code][/quote]
Bom dia cara.
Então, mas os valores estão no relatorio.valorPorCiclo. Que é um map. E as chaves desse map, estão nessa outra lista campanha.ciclos.
Entendeu?
Estamos fazendo uns testes aqui, parece que esse Long que tá matando…
Descobri o que era. Como disse anteriormente, o map era Map<Long,Integer> Porque quando você passa um valor hard code no JSTL, ele faz um autoboxing meio furado e não aceita a chave. A explicação está aqui.
java, jsp, jstl, el
Agora no meu caso, a lista que eu mando com as chaves é Integer…e quando vai como chave do Map, ele não entende e não traz o valor correto. Trocamos as chaves para Long e funcionou.
Segue código resolvido:
<c:forEach var="relatorio" items="${lista}" varStatus="loop">
<tr class="${((loop.index % 2) == 0) ? 'even' : 'odd'}">
<td align="center">${relatorio.codProduto}</td>
<c:forEach var="campanha" items="${ciclos}">
<td align="center">${relatorio.valorPorCiclo[campanha.ciclo}</td>
</c:forEach>
</tr>
</c:forEach>