Como percorrer objetos de uma collection usando EL?

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!

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

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

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!

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:

[quote=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![/quote]

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

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,