glock
Dezembro 16, 2011, 9:10am
#1
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…
<c:forEach items="${transportadoras}" var="transportadora">
<option value="${transportadora.id}" selected="#{transportadora.nome == valorDoBanco ? true : false}">${transportadora.nome}</option>
</c:forEach>
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>
glock
Dezembro 16, 2011, 4:19pm
#6
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})?
glock
Dezembro 16, 2011, 7:26pm
#8
é 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>
glock
Dezembro 17, 2011, 5:00pm
#11
era isto mesmo o problema, cara muito obrigado mesmo.