Como percorrer objetos de uma collection usando EL?

5 respostas
vinny767

Fala pessoal,

Estou com o seguinte problema: Tenho uma lista de serviços na minha JSP e preciso fazer com que sempre que o cursor do mouse fique em cima do serviço, apareça uma descrição dele. Acontece que esses serviços estão em uma collection. Então quando eu coloco o mouse sobre o primeiro serviço, funciona. Usei o código:
title="${colServicos[0].descricao}"

Só que eu preciso fazer isso para todos os serviços (uma for, creio eu). Mas não tenho ideia de como implementar esse for dentro do meu title.

Bem, segue o trecho de código:

<table id="dados" width="100%" class="table"> <tr> <th>Sigla</th> <th>Servico</th> <!-- <th>Situação</th> --> <th>Alterar</th> <th>Excluir</th> </tr> <ww:if test="colServicos.size > 0"> <dt:paginador maxItens="200" maxIndices="100" totalItens="${qtitens}" itens="colServicos"> <tr class="${classe}"> <!-- Trata a exibição das Siglas de acordo com o nível --> <ww:if test="nivel==1"> <td align="center" width="10%"><font color="blue"><b><ww:property value="sigla" /></b></font></td> </ww:if> <ww:if test="nivel==2"> <td align="center" width="10%"><font color="red"><b><ww:property value="sigla" /></b></font></td> </ww:if> <ww:if test="nivel==3"> <td align="center" width="10%"><font color="green"><b><ww:property value="sigla" /></b></font></td> </ww:if> <ww:if test="nivel==4"> <td align="center" width="10%"><font color="black"><b><ww:property value="sigla" /></b></font></td> </ww:if> <!-- Fim (Trata a exibição das Siglas de acordo com o nível)--> <!-- Trata a exibição da descrição do serviço de acordo com o nível --> <ww:if test="nivel==1"> <td width="80%"><a title="${colServicos[0].descricao}"><font color="blue"><b><ww:property value="descricao" /></b></font></a></td> </ww:if> <ww:if test="nivel==2"> <td width="80%"><font color="red"><b><ww:property value="descricao" /></b></font></td> </ww:if> <ww:if test="nivel==3"> <td width="80%"><font color="green"><b><ww:property value="descricao" /></b></font></td> </ww:if> <ww:if test="nivel==4"> <td width="80%"><font color="black"><b><ww:property value="descricao" /></b></font></td> </ww:if> <!-- Fim (Trata a exibição da descrição do serviço de acordo com o nível) --> <!-- <td align="center" width="5%"><ww:property value="situacao" /></td> --> <!-- Trata botões de Alteração e Exclusão --> <td align="center" width="5%"><a href="editServico.action?pIdServico=<ww:property value="idServico" />"><img border="0" src="../imagens/edit.png" /></a></td> <td align="center" width="5%"><a href="javascript:ValidarExclusao('<ww:property value="idServico" />','deleteServico.action?pIdServico=<ww:property value="idServico" />', 'sim', 'exclusão');"><img border="0" src="../imagens/delete.png" /></a></td> <!-- Fim (Trata botões de Alteração e Exclusão) --> </tr> </dt:paginador> </ww:if> <ww:else> <tr class="${classe}"> <td align="center" colspan="4">Nenhum Registro Encontrado.</td> </tr> </ww:else> </table>

A dúvida está na linha 28. Esse código já se encontra dentro de um loop. Só preciso criar algo para percorrer esse indice da coleção!

ABraço!

5 Respostas

G

Você pode usar um foreach da lib Core do JSTL, um exemplo:

<c:forEach items="#{ManagedBean.metodo}" var="usuario">
     #{usuario.nome}
</c:forEach>
vinny767

Nao entendi o ManageBean.metodo.

Olhei uma documentação do JSTL e aqui diz que o var é a variavel que irá percorrer a collection e o “items” é a collection.

É isso?

Abraço!

J

Vinny, vou postar um exemplo aqui pra você:

<c:forEach var="categoria" items="<%=ctg.getCategorias()%>">    // var é uma variável que vai percorrer o arraylist,   ctg.getCategorias() traz um Arraylist que será percorrido
	<tr valign="top">
		<c:choose>
			<c:when test="${usrLogado.tipo == 1}">
				<td class="label" bgcolor='#F5F5F5'><a href="viewCategoria.jsp?categoria=${categoria.id}" class="lista"> ${categoria.categoria} </A></td>         // Pode perceber que aqui ele pega do objeto categoria a id e depois pega também o nome da categoria
				<td width="5%" align="left" class="label" bgcolor='#F5F5F5'><a onclick="javascript:return confirm('Deseja realmente remover esta Categoria?');" href="categoriaCtrl.do?id=${categoria.id}&action=delete" class="lista"><img border="0" src="../images/excluir.gif"></a></td>
			</c:when>
			<c:otherwise>
				<td class="label" bgcolor='#F5F5F5'class="lista"> ${categoria.categoria}</td>
				<td width="5%" align="left" class="label" bgcolor='#F5F5F5' class="lista"><img border="0" src="../images/excluir.gif"></td>
			</c:otherwise>
		</c:choose>
	</tr>
</c:forEach>

Qualquer dúvida, manda bala! :slight_smile:

G

vinny767:
Nao entendi o ManageBean.metodo.

Olhei uma documentação do JSTL e aqui diz que o var é a variavel que irá percorrer a collection e o “items” é a collection.

É isso?

Abraço!

Exato, items seria a collection a ser percorrida, e var seria o objeto atual da iteração.

vinny767

Pessoal,

Já tentei de tudo aqui. Acho que o raciocinio que passei para vocês estava errado. Eu acho que nao posso usar um forEach, porque sempre que o codigo entra em uma condicao (c:if) ele repete a dica para cada item. O que eu preciso mesmo é de uma instrução JSTL que crie uma variavel contadora, acho. Assim, sempre que entrar em uma condição, a váriavel aumenta em um. Para ficar mais claro, vou colocar o trecho de código.

<ww:if test="nivel==1">
    <td width="80%"><a title="${colServicos[0].descricao}"><font color="blue"><b><ww:property value="descricao" /></b></font></a></td>  
</ww:if> 

<ww:if test="nivel==2">
        <td width="80%"><a title="${colServicos[0].descricao}"><font color="red"><b><ww:property    value="descricao" /></b></font></a></td>                  	
</ww:if>

<ww:if test="nivel==3">
        <td width="80%"><a title="${colServicos[0].descricao}"><font color="green"><b><ww:property  value="descricao" /></b></font></a></td>                  	
</ww:if>

<ww:if test="nivel==4">
       <td width="80%"><a title="${colServicos[0].descricao}"><font color="black"><b><ww:property value="descricao" /></b></font></a></td>                  	
</ww:if>

Esse código funciona, mas repete a descricao para todos os itens, o que não pode ocorrer. Ele monta um grid com todos os servicos, mas exibe a mesma descricao(hint) para todos eles.

obrigado,

Criado 21 de julho de 2008
Ultima resposta 22 de jul. de 2008
Respostas 5
Participantes 3