[RESOLVIDO] Select box vir selecionado o que retornou do banco

Bom dia pessoal,

Estou desenvolvendo uma atividade de faculdade, e tenho um form de alterar motorista que possui um select box para selecionar a transportadora a qual o motorista pertence:

<label for="transportadora" id="transportadora"> Selecione a transportadora: </label> <select name="transportadora"> <option value="">.. SELECIONE ..</option> <c:forEach items="${transportadoras}" var="transportadora"> <option value="${transportadora.id}">${transportadora.nome}</option> </c:forEach> </select>

Para buscar as transportadoras cadastra e retorna ao jsp executo o seguinte comando:

[code] if (acaoDoMotorista.equalsIgnoreCase(“cad_motorista”)) {
List transportadoras = daoDoMotorista.getTransportadora();

        request.setAttribute("transportadoras", transportadoras);
        return "cad_motorista.jsp";
    }[/code]

A minha duvida é a seguinte: como faço para deixar o select box vir selecionado com a transportadora a qual o motorista já está cadastro?

Desde já agradeço a ajuda.

acho q da p/ fazer algo com jstl…

&lt;c:forEach items="${transportadoras}" var="transportadora"&gt; &lt;option value="${transportadora.id}" selected="#{transportadora.nome == valorDoBanco ? true : false}"&gt;${transportadora.nome}&lt;/option&gt; &lt;/c:forEach&gt;

att,

Se estivesse usando struts ou jsf seria mais simples.
Bem, precisará criar um atributo na servlet e colocá-lo no escopo, para, ao ser capturado, fazer a comparação pelo id e, então, marcá-lo como selecionado.
Mais ou menos assim

<c:if test="${objeto.selecionado} eq ${transportadora.id}">
<option value="${transportadora.id}" selected="selected">${transportadora.nome}</option>
</c:if>
<option value="${transportadora.id}">${transportadora.nome}</option>

sem querer abusar,mas já abusando, como ficaria com jsf?

att,

sem querer abusar,mas já abusando, como ficaria com jsf?

att,[/quote]

Como jsf exige que você aponte o atributo correspondente do managedBean, fica mais simples.
Você captura a lista de itens disponíveis e, depois, obtém o elemento selecionado.

//código aqui
List<String> itensDisponiveis = dao.listaItensDisponiveis();
String str = dao.findItemSelecionado(params);
//código aqui

E na view

<h:selectOneMenu id="subscriptions" value="#{managedBean.str}">
  <f:selectItem id="item1" itemLabel="News" itemValue="1" />
  <f:selectItem id="item2" itemLabel="Sports" itemValue="2" />
  <f:selectItem id="item3" itemLabel="Music" itemValue="3" />//vamos supor que o str = Music, logo, este item será mostrado selecionado
  <f:selectItem id="item4" itemLabel="Java" itemValue="4" />
  <f:selectItem id="item5" itemLabel="Web" itemValue="5" />
</h:selectOneMenu>

postei errado, o metodo que busca no banco quando é requisitado para alterar o motorista é este:

[code]if (acao.equalsIgnoreCase(“BuscaCodigo”) && acaoASerExecutada.equalsIgnoreCase(“alterar_motorista”)) {

            List<Transportadora> transportadoras = daoDoMotorista.getTransportadora();

            request.setAttribute("transportadoras", transportadoras);
            request.setAttribute("umMotorista", daoDoMotorista.buscaPeloCodigo(codigo));

            return "alterar_motorista.jsp";
     }[/code]

Como você citou que tinha que criar um atributo e colocar no escopo, daria para aproveitar o

request.setAttribute("umMotorista", daoDoMotorista.buscaPeloCodigo(codigo));

e fazer a verificação:

[code]<c:if test="${umMotorista.transportadora} eq ${transportadora.id}">

${transportadora.nome} ${transportadora.nome}[/code]

Isso ${umMotorista.transportadora} é o id de transportadora (${transportadora.id})?

é isto mesmo mesmo. Tentei fazer o que tinha falado, porem não funcionou. Ao executar o alterar motorista, não retornou a transportadora em que o motorista pertencia selecionado.

Bom, depois de pesquisar e de ficar tentando resolver a questão, me deparei com o seguinte tópico:

De cara já percebi onde erramos.

Vejam que jstl não entende isto

<c:if test="${a} eq ${b}">

Mas isto

<c:if test="${a == b}">

Logo, a questão do nosso amigo, se resolve assim:

<c:if test="${umMotorista.transportadora eq transportadora.id}">    
<option value="${transportadora.id}" selected="selected">${transportadora.nome}</option>    
</c:if>    
<option value="${transportadora.id}">${transportadora.nome}</option> 

Créditos ao GUJ, mais uma vez.

Em tempo, em JSF2 ficaria assim:
ManagedBean (a lista está estática, mas poderia receber os valores de qualquer banco de dados

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.teste.mb;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Administrador
 */
@javax.faces.bean.ManagedBean(name="mb")
public class ManagedBean {
    private List<String> items = new ArrayList<String>();
    private String itemSel;
    private String itemSel2;

    public String getItemSel2() {
        itemSel2 = "PR";
        return itemSel2;
    }

    public void setItemSel2(String itemSel2) {
        this.itemSel2 = itemSel2;
    }

    public String getItemSel() {
        itemSel = "RS";
        return itemSel;
    }

    public void setItemSel(String itemSel) {
        this.itemSel = itemSel;
    }

    public List<String> getItems() {
        items.add("MA");
        items.add("BA");
        items.add("CE");
        items.add("MT");
        items.add("PR");
        items.add("SP");
        items.add("RJ");
        items.add("SC");
        items.add("RS");
        items.add("TO");
        items.add("PA");
        items.add("GO");
        items.add("MS");
        return items;
    }

    public void setItems(List<String> items) {
        this.items = items;
    }
}

e a xhtml


<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Demonstração</title>
    </h:head>
    <h:body>
        <h:form>
            <h:panelGrid columns="1">
                <h:outputLabel value="Exemplo de item selecionado com selectManyListBox"/>
                <h:selectManyListbox value="#{mb.itemSel}">
                    <f:selectItems value="#{mb.items}"/>
                </h:selectManyListbox>
                <br/>
                <h:outputLabel value="Exemplo de item selecionado com selectOneListBox"/>
                <h:selectOneMenu value="#{mb.itemSel2}">
                    <f:selectItems value="#{mb.items}"/>
                </h:selectOneMenu>
            </h:panelGrid>
        </h:form>
    </h:body>
</html>

era isto mesmo o problema, cara muito obrigado mesmo.