Caros colegas,
Em anexo esta uma pequena aplicação com dois combos, um de estado e outro de cidade.
E gostaria de fazer algo básico: escolhido o estado listar as cidades daqueles estado, e na primeira execução vir o estado 01 selecionado e já suas cidades listadas.
Porém toda vez que me deparo com este problema: Validation Error: Value is not valid
Acabo tendo que colocar o escopo do bean como session e gostaria de fazer isso com request.
O que esta faltando fazer para um simple combode estado e cidade funcionar?
O código esta abaixo e o exemplo descrito no netbeans esta em anexo.
Obrigado pela atenção.
<?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>Facelet Title</title>
</h:head>
<h:body>
Hello from
<h:form>
<h:panelGrid cellpadding="15">
<h:messages/>
<h:selectOneMenu valueChangeListener="#{indexBean.valueChangeEstado}"
onchange="submit()"
value="#{indexBean.codigoEstado}">
<f:selectItems value="#{indexBean.listaSelacaoEstado}" />
</h:selectOneMenu>
<h:selectOneMenu value="#{indexBean.codigoCidade}">
<f:selectItems value="#{indexBean.listaSelacaoCidade}" />
</h:selectOneMenu>
</h:panelGrid>
</h:form>
</h:body>
</html>
e o bean:
package br;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
/**
*
* @author cunha
*/
@ManagedBean
@RequestScoped
public class IndexBean {
private String codigoEstado;
private String codigoCidade;
private List<SelectItem> listaSelacaoEstado;
private List<SelectItem> listaSelacaoCidade;
/** Creates a new instance of IndexBean */
public IndexBean() {
}
public void valueChangeEstado(ValueChangeEvent event){
this.carregarCidade(event.getNewValue().toString());
}
private void carregarCidade(String codigo){
this.listaSelacaoCidade = new ArrayList<SelectItem>();
if( codigo.equals("1") ){
this.listaSelacaoCidade.add( new SelectItem("1", "cidade 01 do estado 01"));
this.listaSelacaoCidade.add( new SelectItem("2", "cidade 02 do estado 01"));
}else if( codigo.equals("2") ){
this.listaSelacaoCidade.add( new SelectItem("3", "cidade 01 do estado 02"));
this.listaSelacaoCidade.add( new SelectItem("4", "cidade 02 do estado 02"));
}
}
public List<SelectItem> getListaSelacaoCidade() {
return listaSelacaoCidade;
}
public void setListaSelacaoCidade(List<SelectItem> listaSelacaoCidade) {
this.listaSelacaoCidade = listaSelacaoCidade;
}
public List<SelectItem> getListaSelacaoEstado() {
if( this.listaSelacaoEstado == null ){
this.listaSelacaoEstado = new ArrayList<SelectItem>();
this.listaSelacaoEstado.add(new SelectItem("1", "estado 01"));
this.listaSelacaoEstado.add(new SelectItem("2", "estado 02"));
}
return listaSelacaoEstado;
}
public void setListaSelacaoEstado(List<SelectItem> listaSelacaoEstado) {
this.listaSelacaoEstado = listaSelacaoEstado;
}
public String getCodigoCidade() {
return codigoCidade;
}
public void setCodigoCidade(String codigoCidade) {
this.codigoCidade = codigoCidade;
}
public String getCodigoEstado() {
return codigoEstado;
}
public void setCodigoEstado(String codigoEstado) {
this.codigoEstado = codigoEstado;
}
}