Esta é única maneira de fazer isso ?
package br.com.serjaum.mb;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.hibernate.Session;
import br.com.serjaum.dao.CidadeDAO;
import br.com.serjaum.dao.EstadoDAO;
import br.com.serjaum.dao.HibernateUtil;
import br.com.serjaum.modelo.Cidade;
import br.com.serjaum.modelo.Estado;
public class RegiaoMB implements Serializable {
private static final long serialVersionUID = -4281390476508498320L;
private List<SelectItem> cidades = new ArrayList<SelectItem>();
private Estado estado = new Estado();
private Cidade cidade = new Cidade();
public List<SelectItem> getEstados(){
Session session = HibernateUtil.currentSession();
EstadoDAO dao = new EstadoDAO(session, Estado.class);
List<Estado> lista = dao.list();
List<SelectItem> itens = new ArrayList<SelectItem>(lista.size());
for(Estado s : lista){
itens.add(new SelectItem(s.getId(), s.getNome()));
}
return itens;
}
public void actionCarregaCidades(){
System.out.println("id do estado selecionado >>> " + this.estado.getId());
this.cidades = this.getCidadesByEstado();
}
public List<SelectItem> getCidadesByEstado(){
Session session = HibernateUtil.currentSession();
CidadeDAO dao = new CidadeDAO(session, Cidade.class);
List<Cidade> cidades = dao.getCidadesByEstado(this.estado.getId());
List<SelectItem> items = new ArrayList<SelectItem>(cidades.size());
for(Cidade c : cidades){
items.add(new SelectItem(c.getId(), c.getNome()));
}
return items;
}
public List<SelectItem> getCidades() {
return cidades;
}
public void setCidades(List<SelectItem> cidades) {
this.cidades = cidades;
}
public Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
public Cidade getCidade() {
return cidade;
}
public void setCidade(Cidade cidade) {
this.cidade = cidade;
}
}