Tags
Artigos Relacionados
Share This
Combo Cidade UF com Primefaces e JSF 2
Segue para comunidade, com o objetivo de facilitar pra quem precisar um combo Cidade/ Unidade Federal com JSF 2 e Primefaces:
Veja funcionando:
index.xhtml
[cc lang=”html”]
[/cc]
CidadeUFComboBean.java
[cc]
/**
* CidadeUF Combo Controller
*
* @author César Barbosa
*/
@ManagedBean
@ApplicationScoped
public class CidadeUFComboBean implements Serializable{
EnderecoCidadeDAO cidDao = new EnderecoCidadeDAO();
EnderecoUFDAO ufDao = new EnderecoUFDAO();
/*
* Construtor
*/
public CidadeUFComboBean() {
populateUFs();
populateCidades();
}
/*
* Propriedades
*/
private String uf;
public String getUF() {
return uf;
}
public void setUF(String uf) {
this.uf = uf;
}
private String cidade;
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
private SortedMap
new TreeMap
public SortedMap
return ufs;
}
public void setUFs(SortedMap
this.ufs = ufs;
}
private SortedMap
new TreeMap
public SortedMap
return cidadesData;
}
public void setCidadesData(SortedMap
this.cidadesData = cidadesData;
}
private SortedMap
public SortedMap
return cidades;
}
public void setCidades(SortedMap
this.cidades = cidades;
}
/*
* Helpers
*/
private void populateUFs(){
System.out.println(“Populando Ufs…”);
List
for (EnderecoUF enderecoUF : enderecoUFs) {
ufs.put(enderecoUF.getSigla(), enderecoUF.getSigla());
}
System.out.println(“Populando Ufs com “+ufs.size()+” itens…”);
}
private void populateCidades(){
for (String ufName : ufs.keySet()) {
cidadesData.put(ufName,cidDao.listCidadeNomes(ufName));
}
}
/*
* Action handlers
*/
public void changeUF() {
if(uf !=null && !uf.equals(“”))
cidades = cidadesData.get(uf);
else
cidades = new TreeMap
}
}
[/cc]
Um grande abraço e muito sucesso!
Olá amigo,
Estou num apuro com este assunto. O problema é que quando seleciono o estado, o meu atributo estadoSelecionado não está com o valor do estado selecionado na combo. Já fiz via <f: e o mesmo problema ocorre.
Comparei com o seu onde você setou "cidadeUFComboBean.UF". Ou seja, quando o usuário selecionar uma UF o managedBean já vai saber por ter lá o atributo tipo String nomeado como uf certo ? Mas no meu ele não envia essa info. Quando o método é chamado, o valor está nulo.
[code]
[/code]
Sds,
Rodrigo
@Rodrigo
Meu amigo, o problema todo era o immediate=”true” nos meus componentes… tirei (padrão false) e funcionou. Eu entendi errado então a funcionalidade desta propriedade. Eu havia colocado como true para que ele não validasse o campo ao preencher a combobox.
Sds,
Rodrigo
Ótimo! Perdoe-me pela demora, mas só tive tempo de ver agora, ontem foi bastante corrido. Um grande abraço e muito sucesso!
Olá Cesar,
Legal a dica, mas quando eu utilizo o “listener” não estou conseguindo recuperar o valor dentro do método
public void changeUF() {
if(uf !=null || !uf.equals(“”))
cidades = cidadesData.get(uf);
else
cidades = new TreeMap();
}
Grato,
Cristiano Assis
Desculpe a demora por responder estive um tempo ausente. Não entendi muito bem sua pergunta.
Olá Cesar,
Qual primefaces vc esta utilizando para essa implementação?
Abs,
Mário
Desculpe a demora por responder:
JSF 2.0
Primefaces 2.2.1.
Glassfish 3.1. Recomendo utilizar o NetBeans (no meu caso uso o 7), tive problemas de comportamento da IDE rodando o Glassfish no Eclipse.
além disso Hibernate 3, e CDI…
Um grande abraço e muito sucesso!
Olá! Muito bom seu artigo, ajudou bastante!
No início, mesmo seguindo estas orientações, não estava funcionando, o método sequer estava sendo chamado (mesmo caso sem usar o p:ajax) e o pior: nada de erro no log!
Pesquisando na net encontrei este post http://www.mkyong.com/jsf2/jsf-2-valuechangelistener-example/ e vi que precisava incluir o onchange=”submit()”, daí finalmente deu algum erro!
O problema era que eu tinha incluído os jars do hibernate-validator e com isto estava em conflito com a versão que já tinha no servidor de aplicação (JBoss 5.0.1).
Depois de corrigir as bibliotecas e fazer sem ajax funcionar, voltei a fazer o exemplo do seu artigo e funcionou de boa.
Eu só tive que passar a usar String também no value, antes estava como Object, aí teria que criar Converter e neste caso não era necessário.
vlw
abçs
Olá César,
tem como você dar uma olhada neste link?
http://www.guj.com.br/java/275718-selectoneradio–valuechangelistener-nao-funciona-com-primefaces-331#1450112
Cesar, eu refiz o seu código, porém não consigo pegar as cidades relativas ao estado escolhido. É necesseario a criação de uma classe Converter? Se sim, poderia me passar o código da mesma, pois eu estou apanhando a quase um mês e estou a ponto de entregar os pontos.
Obrigado.
Olá Amigo, não consegui achar necessariamente este exemplo, provavelmente ficou no hd do meu outro computador. Mas segue o converter que estou usando em um projeto.
[code]
public class CityConverter implements Converter{
CityDao dao = new CityDao();
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if(value.equalsIgnoreCase(“Nenhum”) || value.equalsIgnoreCase(“Nenhuma”)){
return new City();
}
City result;
if (!isLong(value))
result = dao.getByName(value);
else
result = dao.get(new Long(value));
return result;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value instanceof String)
return (String) value;
City city = (City) dao.get((Long)value);
return “”+city.getId();
}
private boolean isInteger(String input) {
try {
Integer.parseInt(input);
return true;
} catch (Exception e) { return false; }
}
private boolean isLong(String input) {
try {
new Long(input);
return true;
} catch (Exception e) { return false; }
}
}
[/code]
Espero que seja útil, sucesso e um grande abraço.
Amigo Cesar, seria possível disponibilizar o código da City e me explicar esta linha: City result;
pois ao tentar implementar, me dá erro no final da linha (;), ok? Eu vou repassar o meu fonte e quando houver possibilidade, favor criticá-lo, pois se trata de um aprendizado e será muito bem vindo todo ensinamento. Um abraço.
Estou começando com Java e Primefaces. Não estou conseguindo testar o componente TabView. Parece que está faltando o bean. Você pode me ajudar? Obrigado
http://www.primefaces.org/showcase/ui/tabviewEffects.jsf
Olá Agmar, acabei de postar o exemplo de Managed Bean que vc queria: http://www.codesample.co/2012/08/exemplo-primefaces-3-3-1-tabview-effects/
Veja funcionando tb. aqui.
Um grande abraço e sucesso!