Iterar Map com Jstl e Jsf?

6 respostas
E

Galera alguém já iterou um Map com jstl e jsf mais ou menos assim:

<c:forEach var="item" items="${tratadorAtividade.agrupaPorTerminal}">
	<c:out value="${item.key}"/>
	<c:out value="${item.value}"/>	
</c:forEach>

Este “tratadorAtividade.agrupaPorTerminal” está retornando um Map.

Mas está dando erro:

se alguém puder ajudarr…

6 Respostas

Rapapel

efcjunior:
Galera alguém já iterou um Map com jstl e jsf mais ou menos assim:

<c:forEach var="item" items="${tratadorAtividade.agrupaPorTerminal}">
	<c:out value="${item.key}"/>
	<c:out value="${item.value}"/>	
</c:forEach>

Este “tratadorAtividade.agrupaPorTerminal” está retornando um Map.

Mas está dando erro:

se alguém puder ajudarr…

Nunca tentei amigo mas vc pode iterar sobre o keySet do map. tratadorAtividade.keySet, no var deve ir a chave do map a cada iteração. Ou então com o values do Map tratadorAtividade.values que retorna uma Coleção com os valores do map ai no var deve ir o valor corrente.
Nunca tentei, pode ser que não de certo o keySet e o values não são propriedades e sim métodos.

Boa sorte.

E

tentei deste jeito colega, mas não deu certo…Estou pesquisando, mas está complicado. Se alguém puder me ajudar !!!

Rapapel

Acho que com el não vai dar.
Scriptlet com certeza dá, mas não fica algo elegante.

Vc pode criar um CustomMap que implementa Map, delegar as funções para uma implementação de HashMap ou do tipo de Map que vc necessitar e criar métodos getKeySet e getValues para poder usar o seu Map com EL. Mas ai depende de vc analisar e ver se vale a pena ou não.

Boa sorte.

T+

E

entendi, vou ver uma melhor maneira de fazer isso…Valeu !!!

L

O jeito faces de se fazer uma iteração é assim:

<h:dataTable var="item" value="#{tratadorAtividade.agrupaPorTerminal}">
	<h:column>
		<h:outputText value="${item.key}"/>
	</h:column>
	<h:column>
		<h:outputText value="${item.value}"/>
	</h:column>
</h:dataTable>

É claro! Assume-se que o conteúdo vai ser jogado num table. Se não for esse o comportamento desejado, vai ter que usar alguns iterators que vem com o Tomahawk.

E

Consegui resolver desta maneira :

<f:view>
	<c:forEach var="entry" items="${tratadorAtividade.agrupaPorTerminal}">
		<table>
		<tr>
			<td>Terminal</td>
			<td><c:out value="${entry.key}"/></td>
		</tr>
		<tr>
			<td>Serviço</td>
			<td>Situação</td>
		</tr>			
		<c:forEach var="row" items="${entry.value}">
		<tr>
			<td><c:out value="${row.servico}"/></td>
			<td><c:out value="${row.situacao}"/></td>
		</tr>		
		</c:forEach>
		</table>		
	</c:forEach>
	
</f:view>

obrigado a todos.

Criado 24 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 6
Participantes 3