Olá…
Gostaria de saber como faço para carregar uma tela com um valor do selectOneMenu carregado de acordo com o cadastro anterior.
O problema é que não sei quantos selectOneMenu tenho na tela.
Segue abaixo o meu código.
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Editar viagem</title>
<link rel="stylesheet" type="text/css" href="css/common.css" />
</head>
<body>
<f:view>
<a4j:form id="form">
<rich:panel style="width : 1242px; height : 556px;">
<f:facet name="header">
<h:outputText value="Edição da viagem" />
</f:facet>
<br />
Selecione a Viagem: <h:selectOneMenu id="listaRotas" value="#{editarViagem.rotaAtual}" valueChangeListener="#{editarViagem.onChangeRota}" immediate="true">
<a4j:support ajaxSingle="true" event="onchange" reRender="form" />
<f:converter converterId="rotaEditarConverter" />
<f:selectItems value="#{editarViagem.lista}" />
</h:selectOneMenu>
<h:outputText id="status" value="#{editarViagem.texto}" style="color:red;font-size:12px" />
<BR>
<BR>
<h:dataTable id="tblParadas" border="1" value="#{editarViagem.tableParadas}" var="rev" summary="Relação de Paradas" rendered="#{editarViagem.rotaAtual != null}" style="FONT-SIZE: small; width : 1173px; height : 79px;">
<h:column>
<f:facet name="header">
<h:outputText value="Cliente:" />
</f:facet>
<h:outputText value="#{rev.cliente}" rendered="#{editarViagem.rotaAtual != null}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Motorista:" />
</f:facet>
<h:selectOneMenu id="listaMotoristas" value="#{editarViagem.motoristaFiltro}" rendered="#{editarViagem.rotaAtual != null}" >
<f:converter converterId="motoristaConverter" />
<f:selectItems value="#{editarViagem.listaMotoristas}" /> <!-- aqui preciso que venha preenchido o valor do cadastro -->
</h:selectOneMenu>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Alterar" />
</f:facet>
<h:commandButton action="#{editarViagem.salvar}" value="Alterar" rendered="#{editarViagem.rotaAtual != null}" />
</h:column>
</h:dataTable>
</rich:panel>
<rich:messages id="msg" style="color:Red;font-size:13px;font-family:Arial;width : 1249px; height : 92px;">
</rich:messages>
</a4j:form>
</f:view>
</body>
</html>
Meu Bean:
/*imports omitidos*/
public class EditarViagemBean {
private List<Parada> listaParadas;
private String texto;
private List<Rota> listaRota = new ArrayList<Rota>();
private List<SelectItem> lista = new ArrayList<SelectItem>();
private Rota rotaAtual;
private DataModel tableParadas;
private Date dataFiltro = new Date();
private String carretaAtual;
private Parada parada;
private ParadaSE paradaSE;
private RotaSE rotaSE;
private MotoristaSE motoristaSE;
private List<Motorista> motoristas;
private List<SelectItem> listaMotoristas = new ArrayList<SelectItem>();
private String motoristaId;
private Motorista motoristaFiltro;
public EditarViagemBean() {
try {
rotaSE = new RotaSE();
rotaSE.iniciar();
paradaSE = new ParadaSE();
paradaSE.iniciar();
motoristaSE = new MotoristaSE();
motoristaSE.iniciar();
if (lista.size() == 0)
atualizaListaRota();
} catch (Exception e) {
e.printStackTrace();
FacesContext.getCurrentInstance().addMessage("",
new FacesMessage("Erro ao atualizar lista de viagem"));
}
}
/**
* Lista de motoristas
*/
public void atualizaListaMotoristas() {
try {
setMotoristas(motoristaSE.getAllMotoristas());
} catch (Exception e) {
setListaMotoristas(new ArrayList<SelectItem>());
return;
}
getListaMotoristas().clear();
for (Motorista m : getMotoristas()) {
getListaMotoristas().add(new SelectItem(m, m.getNome()));
}
}
/**
* obtem relacao de viagens ativas
*/
public void atualizaListaRota() throws OriginalException {
setListaRota(rotaSE.getRotasEditar(getDataFiltro()));
getLista().clear();
getLista().add(new SelectItem(null, "** Selecione **"));
if (getListaRota().size() > 0) {
for (int i = 0; i < getListaRota().size(); i++) {
Rota rota = getListaRota().get(i);
getLista().add(new SelectItem(rota, rota.getId()));
}
setTexto("");
} else {
setTexto("Não foram encontradas viagens!");
}
}
public void filtrar() {
try {
atualizaListaRota();
} catch (Exception ex) {
FacesContext.getCurrentInstance().addMessage("",
new FacesMessage(ex.getMessage()));
}
}
public void onChangeRota(ValueChangeEvent e) {
setRotaAtual((Rota) e.getNewValue());
escolher();
}
/**
* obtem relacao de paradas da rota selecionada.
*/
private void getParadasPorRota() throws OriginalException {
atualizaListaMotoristas();
atualizaListaVeiculos();
setListaParadas(paradaSE.getAllParadasPorRota(getRotaAtual().getId(),
true));
setTableParadas(new ListDataModel(getListaParadas()));
}
/**
* Salvar os niveis e o descarregado das paradas.
*/
public void salvar() {
try {
setParada((Parada) getTableParadas().getRowData());
getParada().setStatus(1);
paradaSE.editaRota(getParada());
} catch (OriginalException e) {
e.printStackTrace();
}
}
/**
* obtem rota selecionada, exibe detalhes e carrega paradas respectivas
*/
public void escolher() {
if (getRotaAtual() != null) {
try {
setTexto("Viagem Selecionada : " + getRotaAtual().getId());
getParadasPorRota();
} catch (OriginalException e) {
setTexto("Erro ao obter as paradas");
e.printStackTrace();
}
} else {
setTexto("Por favor selecione uma rota válida!");
}
}
/*gets e sets omitidos*/
}
Se alguém puder me ajudar…
obrigada
