Pessoal,
Estou precisando de uma orientação para codificar uma tela que possui uma grid com uma relação entre duas listas de combos associativos. De um lado tenho combo(s) de estado e do outro combo(s) de cidade, para cada estado selecionado devo carregar o combo de cidade carregando todas as cidades para este estado.
Não sei quantos combos de estado terão, preciso setar os ids de estado e cidade de forma que ao salvar possa percorrer esta lista contendo os ids de forma pareada, ou seja.
uf[0] = ‘SP’
cidade[0] = ‘São Paulo’
uf[1] = ‘MG’
cidade[1] = ‘Belo Horizonte’
uf[2] = ‘BA’
cidade[2] = ‘Salvador’
A minha dificuldade é de montar isto na tela, pois eu precisaria associar cada combo com um item desta lista.
Segue abaixo o código da página e a classe associada.
Agradeço a colaboração.
Lembrando a tela está em JSF 1.2 e usando o http://myfaces.apache.org/tomahawk
página:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:t="http://myfaces.apache.org/tomahawk">
<ui:composition template="/comum/template.jspx">
<ui:define name="titulo">
:: Associação de cidades não encontradas no Sistema SGR.
</ui:define>
<ui:define name="conteudo">
<f:view>
<t:document>
<t:documentHead>
<style type="text/css">
.yearRowStyle {
background-color: #A8D1E8;
color: green;
text-align: center;
font-weight: bold;
font-style:italic;
}
.weekRowStyle {
background-color: #D6EBFC;
}
.selectedDayCellStyle {
background-color: #ECD5D2;
}
</style>
</t:documentHead>
<t:documentBody >
<h:form id="frmListarCidades">
<table align="center" border="0">
<tr>
<td align="left">
Pesquisa
</td>
</tr>
</table>
<table align="center" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td align="center">
<t:dataTable var="cidade" styleClass="tabela" renderedIfEmpty="false"
headerClass="header_grid" columnClasses="column_grid" rowStyleClass="row_grid"
value="#{conhecimentoFaces.cidadesNaoEncontradas}" sortable="true">
<h:column>
<f:facet name="header">
<t:commandSortHeader columnName="sortColumnCidadeIncorreta" arrow="false">
<f:facet name="ascending">
<t:graphicImage url="../imgs/sort_asc.gif" styleClass="sort_button"/>
</f:facet>
<f:facet name="descending">
<t:graphicImage url="../imgs/sort_desc.gif" styleClass="sort_button"/>
</f:facet>
<h:outputLabel value="Cidade Incorreta"/>
</t:commandSortHeader>
</f:facet>
<h:outputText value="#{cidade.nome}"/>
</h:column>
<h:column>
<f:facet name="header">
<t:commandSortHeader columnName="sortColumnUF" arrow="false">
<f:facet name="ascending">
<t:graphicImage url="../imgs/sort_asc.gif" styleClass="sort_button"/>
</f:facet>
<f:facet name="descending">
<t:graphicImage url="../imgs/sort_desc.gif" styleClass="sort_button"/>
</f:facet>
<h:outputLabel value="UF"/>
</t:commandSortHeader>
</f:facet>
<t:selectOneMenu id="estadosCorretosCombo" forceId="true"
value="#{conhecimentoFaces.unidadeFederativaModel.sigla}">
<f:selectItem itemValue="" itemLabel="Selecione um Estado" />
<f:selectItems value="#{conhecimentoFaces.ufsCorretas}" />
</t:selectOneMenu>
</h:column>
<h:column>
<f:facet name="header">
<t:commandSortHeader columnName="sortColumnCidadeCorreta" arrow="false">
<f:facet name="ascending">
<t:graphicImage url="../imgs/sort_asc.gif" styleClass="sort_button"/>
</f:facet>
<f:facet name="descending">
<t:graphicImage url="../imgs/sort_desc.gif" styleClass="sort_button"/>
</f:facet>
<h:outputLabel value="Cidade Correta"/>
</t:commandSortHeader>
</f:facet>
<t:selectOneMenu id="cidadeCorretosCombo" forceId="true"
value="#{conhecimentoFaces.cidade.nome}">
<f:selectItem itemValue="" itemLabel="Selecione uma Cidade" />
<f:selectItems value="#{conhecimentoFaces.cidadesCorretas}" />
</t:selectOneMenu>
</h:column>
</t:dataTable>
</td>
</tr>
</table>
</h:form>
</t:documentBody>
</t:document>
</f:view>
</ui:define>
</ui:composition>
</html>
Classe associada:
public class ConhecimentoFaces {
private Collection<Cidade> cidadesNaoEncontradas;
private List<SelectItem> ufsCorretas;
private List<SelectItem> cidadesCorretas;
private UnidadeFederativa unidadeFederativaModel = new UnidadeFederativa();
private Cidade cidade = new Cidade();
private CidadeBO cidadeRN;
public ConhecimentoFaces() throws IndadosAplicacaoException{
this.carregarUFsCorretas();
this.carregarCidadesCorretas();
}
public Collection<Cidade> getCidadesNaoEncontradas() {
try {
cidadesNaoEncontradas = DAOFactory.getInstance().getCidadeDAO().getCidadesNaoEncontradasSGR();
} catch(IndadosAplicacaoException e){
System.out.println(e.getMessage());
}
return cidadesNaoEncontradas;
}
public void carregarUFsCorretas() throws IndadosAplicacaoException {
this.cidadeRN = new CidadeBO();
this.setUfsCorretas(SisFreteUtil.initCombo(this.getCidadeRN().pesquisarUfs(), "sigla", "sigla"));
}
public void carregarCidadesCorretas() throws IndadosAplicacaoException {
//this.setCidadesCorretas(SisFreteUtil.initCombo(DAOFactory.getInstance().getCidadeDAO().getAllCidadesSGR(), "nome", "nome"));
this.setCidadesCorretas(SisFreteUtil.initCombo(new ArrayList<Cidade>(), "nome", "nome"));
}
public void setCidadesNaoEncontradas(Collection<Cidade> cidadesNaoEncontradas) {
this.cidadesNaoEncontradas = cidadesNaoEncontradas;
}
public List<SelectItem> getUfsCorretas() throws IndadosAplicacaoException{
return ufsCorretas;
}
public void setUfsCorretas(List<SelectItem> ufsCorretas) {
this.ufsCorretas = ufsCorretas;
}
public CidadeBO getCidadeRN() {
return cidadeRN;
}
public void setCidadeRN(CidadeBO cidadeRN) {
this.cidadeRN = cidadeRN;
}
public UnidadeFederativa getUnidadeFederativaModel() {
return unidadeFederativaModel;
}
public void setUnidadeFederativaModel(UnidadeFederativa unidadeFederativaModel) {
this.unidadeFederativaModel = unidadeFederativaModel;
}
public List<SelectItem> getCidadesCorretas() {
return cidadesCorretas;
}
public void setCidadesCorretas(List<SelectItem> cidadesCorretas) {
this.cidadesCorretas = cidadesCorretas;
}
public Cidade getCidade() {
return cidade;
}
public void setCidade(Cidade cidade) {
this.cidade = cidade;
}
}