SelectOneMenu no JSF, resultado do banco muito grande(900000 registros)

Tem algum modo de a cada vez que eu selecione um SelectOneMenu atualizar um próximo?
Eu estou fazendo uma parte de endereços que consegui no Correio.
Mas são 900000 registros.

Então criei varios SelectOneMenu
o 1° Lista de Estados
E tem um botão que atualiza a tela do lado para carregar o próximo SelectOneMenu
Que é de Cidades, depois de Bairro, depois de Ruas
Não tem um modo que quando eu selecionar em um Item em um o outro já seja atualizado?
Sem precisar clicar em um botão atualizar?

Ou alguém tem uma solução melhor?Acho que também seria muito agradável.

Ola Mark

Você pode usar Ajax para atualizar esses dados de uma forma melhor.

Procure sobre ajax4jsf e irá ver que é super simples de fazer o que você quer.

http://www.guj.com.br/posts/list/40997.java

[]´s

Carlos

O richfaces também tem esse suporte?

A taglib usado naquele programa é a mesma que essa?

<%@taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="a4j"%>

?

Porque eu tentei usa o a4j:support mas não existe pra taglib que mostrei.
Se alguém tiver o site eu agradeceria.

E se não fosse muito queria saber se para ter os SelectItems poderia ser feito como fiz nessa classe

package com.web.tecea.handler.endereco;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import com.web.tecea.database.dao.DAO;
import com.web.tecea.model.endereco.Bairro;
import com.web.tecea.model.endereco.Cidade;
import com.web.tecea.model.endereco.Endereco;
import com.web.tecea.model.endereco.Rua;
import com.web.tecea.model.endereco.UF;

public class EnderecoHandler {
	private Endereco end;
	private DAO<Rua> dao;
	private String uf, cidade, bairro;
	private UF estate;
	private Cidade city;
	private Bairro zone;
	
	public EnderecoHandler() {
		dao = new DAO<Rua>(Rua.class);
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public String getUf() {
		return uf;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public Endereco getEnd() {
		return end;
	}

	public String getCidade() {
		return cidade;
	}

	public String getBairro() {
		return bairro;
	}

	public List<SelectItem> getUFBox() {
		List<SelectItem> list = new ArrayList<SelectItem>();
		DAO<UF> dao = new DAO<UF>(UF.class);
		dao.init();
		List<UF> ufs = dao.getList();
		for (UF uf : ufs)
			list.add(new SelectItem(uf.getNome()));
		return list;
	}

	public List<SelectItem> getCidadeBox() {
		List<SelectItem> list = new ArrayList<SelectItem>();
		estate = (UF) dao.search(UF.class, "UF", "nome", uf);
		Object[] criteria1 = { "uf", estate };
		List<Rua> ruas = dao.getList(criteria1);
		for (Rua rua : ruas)
			list.add(new SelectItem(rua.getCidade().getNome()));
		return list;
	}

	public List<SelectItem> getBairroBox() {
		List<SelectItem> list = new ArrayList<SelectItem>();
		city = (Cidade) dao.search(Cidade.class, "Cidade", "nome", cidade);
		Object[] criteria1 = { "uf", estate };
		Object[] criteria2 = { "cidade", city };
		List<Rua> ruas = dao.getList(criteria1,criteria2);
		for (Rua rua : ruas)
			list.add(new SelectItem(rua.getBairro().getNome()));
		return list;
	}

	public List<SelectItem> getRuaBox() {
		List<SelectItem> list = new ArrayList<SelectItem>();
		DAO<Rua> dao = new DAO<Rua>(Rua.class);
		zone = (Bairro) dao.search(Bairro.class, "Bairro", "nome", bairro);
		Object[] criteria1 = { "uf", estate };
		Object[] criteria2 = { "cidade", city };
		Object[] criteria3 = { "bairro", zone };
		List<Rua> ruas = dao.getList(criteria1, criteria2, criteria3);
		for (Rua rua : ruas)
			list
					.add(new SelectItem(rua.getCep() + " - "
							+ rua.getLogradouro() + rua.getLogradouro()
							+ rua.getComplemento() + " - "
							+ rua.getBairro().getNome() + " - "
							+ rua.getCidade().getNome() + " - "
							+ rua.getUf().getNome()));
		return list;
	}
}

Ninguém sabe me responder? E outra coisa, existe uma ferramenta gratuita para fazer telas JSF no Dreamwever?