Ajuda com JSTL[RESOLVIDO]

6 respostas
T

Um candidato se cadastrou e selecionou como escolaridade Pós Graduação. Na página onde é realizado a alteração de dados, quero que seja listado todas as escolaridades, mas tem que ser exibido como selecionado Pós Graduação.
Nesse trecho de código estou fazendo um teste para verificar se se a escolaridade que tenho cadastrada é igual a selecionada pelo candidato, se for
marcar como selecionada. Só que não está funcionando.
Tenho como ultima opção outros, e se o candidato selecionou Pós Graduação deveria aparecer como selecionado Pós Graduação, mas sempre fica marcado outros

<select name="escolaridade"> 
      	<option value=""></option>                	
          <c:forEach var="escolaridades" items="${requestScope.escolaridades}"> 
               	<c:if test="${candidato.escolaridade.descricao == escolaridades.descricao}">//se a descrição for igual marcar como selected
                      <c:set var="selecionar" value="selected" />
                </c:if> 
                     	                        	                      	  
               <option value="${escolaridades.idEscolaridade}" ${selecionar}>${escolaridades.descricao}</option>     	   
    	  </c:forEach>
</select>

6 Respostas

rodolfocop

Ola amigo!

Não entendi bem seu problema é na taglib ou na jsp?

caso seja na taglib coloque o codigo aqui para que possa analisar.

leandrocm86

Sinceramente não sei o que pode estar errado aí, mas já fiz coisas parecidas de uma forma um pouco diferente. Tenta assim:

<select name="escolaridade">          
    <c:forEach var="escolaridades" items="${requestScope.escolaridades}">
        <c:choose>          
                <c:when test="${candidato.escolaridade.descricao == escolaridades.descricao}">//se a descrição for igual marcar como selected  
                       <option value="${escolaridades.idEscolaridade}" selected>${escolaridades.descricao}</option>   
                 </c:when>
                 <c:otherwise>
                       <option value="${escolaridades.idEscolaridade}">${escolaridades.descricao}</option>
                 </c:otherwise>                                                                
        </c:choose>             
    </c:forEach>  
</select>
leandrocm86

Agora já até sei o que está errado…
Depois que você marca a variável selecionar como selected, ela nunca é apagada de novo.
Então toda option que vem depois da primeira selected, vem selected também. Você pode verificar isso checando o código fonte html final pelo navegador.
Isso acontece porque a variável, apesar de ser criada dentro de uma iteracao, nao tem o escopo restrito ali dentro. Se não me engano, quando você não especifica o escopo, o c:set coloca o escopo Page como padrão.

T

Valeu, leandrocm86 e rodolfocop.
Com essa explicação do leandrocm86 vou tentar resolver esse probleminha.

Obrigado. 8)

leandrocm86

Cara, sei que essa coisa de leitura sugeria muitas vezes não rola, mas te recomendo FORTEMENTE ler isso

É um capítulo gratuito disponibilizado pela Head First, melhor série de livros sobre Java na opinião de muitos, inclusive eu.
Quando comecei a mexer com JSTL eu tava lavando muita surra até ler esse capítulo.

É uma leitura leve, agradável e fácil. O capítulo não é grande e você vai esclarecer muitas coisas sobre JSTL.

T+

T

Obrigado. Vou ler.

Criado 3 de novembro de 2008
Ultima resposta 3 de nov. de 2008
Respostas 6
Participantes 3