[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 

Forum Read-Only! Check the new site and forum here!

Países, Estados e Cidades: Ajax Combo  XML
Forum Index -> Comentários Gerais
Author Message
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Uma tarefa repetitiva de muitos projetos web e que dá um trabalho grotesco para implementar são os combos para o usuário colocar sua localidade.

São três combos: um que ele escolhe o país, outro que ele escolhe o estado (se houver, pois há paises como a França que não possui estados, apenas cidades) e outro onde ele escolhe a cidade.

Um exemplo disso (feito por mim com IFrame há alguns anos atrás) está aqui:

http://www.parperfeito.com.br/servlet/NewRegistration

Reparem que os combos são interligados, ou seja, quando eu seleciono Brasil, o combo de estados vai no servidor e se preenche com os estados do Brasil...

Estou querendo fazer isso para o Mentawai, ou seja, umas tags para implementar isso.

A boa notícia é que já fiz o trabalho sujo de criar os objetos Country, State e City e as listas com os milhares de paises, estados e cidades. Está no SVN do Mentawai, e no método main de Country.java tem um exemplo de como usá-lo. Veja que o método Country.init() acessa os arquivos txt que estão dentro de org/mentawai/csc/ e carrega todos os países, estados e cidades em memória.

Code:
 
    public static void main(String[] args) throws Exception {
       
       Country.init();
       
       Iterator<Country> iter = Country.getCountries(new Locale("pt"));
       
       while(iter.hasNext()) {
          
          System.out.println(iter.next());
       }
       
       System.out.println();
       
       Country c = Country.getById(53);
       
       System.out.println(c);
       
       Iterator<State> states = c.getStates();
       
       while(states.hasNext()) {
          
          System.out.println(states.next());
       }
       
       State s = State.getById(333);
       
       Iterator<City> cities = s.getCities();
       
       while(cities.hasNext()) {
          
          System.out.println(cities.next());
       }
    }
 


O trabalho sujo já está feito, agora seria legal se alguém pudesse fazer o trabalho intelectual, ou seja, usar Ajax (muito provavelmente o Ajax facilitado que o Robert fez que ficou excelente) para contruir as tags que vão gerar esses combos. Precisaremos de actions do Mentawai para receber as requisicoes ajax e, como no método main acima, retornar as listas correspondentes.

Alguém se habilita? Robert? Seria um bom teste para o seu Ajax facilitado...

OBS1: As listas de paises, estados e cidades possuem 350k, logo iremos disponibilizar isso a parte no jar csc.jar, para não engordar tanto o jar do mentawai. Podem pegar o csc.jar aqui: http://www.mentaframework.org/beta/csc.jar É só colocar esse jar no classpath da aplicação (/WEB-INF/lib) que o Country.init() se vira para carregá-lo.

OBS2: Note que a classe Country possui outros métodos como hasStates(), que diz se aquele país tem ou não estados...




Sergio Oliveira

IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Putz isso seria muito bem vindo....

Eu mesmo to usando algo parecido (mas no BD mesmo), e pra achar os a lista de paises foi dureza

Isso realmente seria um UPPER no menta Sérgio parabéns. Por falar nisso muda no Robert lá q ta como Developer e é Desenvolvedor =D

Bom e como vc mesmo disse trabalho intelectual em ajax é com o nosso Robert Willian

E por falar nele, Parabéns Robert por fazer parte da equipe de desenvolvimento.

Um dia eu chego lá

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Afff, Aff como nao vou aguentar chegar em ksa pra ver os fontes disso,
soh pra mim ter uma ideia, como que os paises estao relacionados com os
estados etc... é como um banco de dados relacinal?

Code:
 idPais | nomePais
 1          Brasil
 
 
 
 idEstado   |   nomeEstado    |    idPais
 1                  Mato Grosso          1
 

????

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

O arquivo txt com as listas é relacional, mas isso indifere, pois quando vc chamar Country.init(); tudo vai ser carregado para a memória e temos então um grafo de objetos, ou seja, Country tem vários States; State tem vários Cities.

Country contem lista de States; State contem lista de Cities. Esse trabalho chato (e deu trabalho!) eu já fiz....

Daí não tem mistério... O negócio agora é a mágica do ajax para fazer os combos dinamicos...

Sergio Oliveira

robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Esta ai a action fungando juntamente com a tag ajaxSelect...

a mudei tambem o build.xml , vc tinha esquecido de mandar copiar
os .txt

http://rapidshare.com/files/47860883/MentaAjax.war.html

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

robertwgil wrote:
Esta ai a action fungando juntamente com a tag ajaxSelect...
 


Como assim? Já fez???


a mudei tambem o build.xml , vc tinha esquecido de mandar copiar
os .txt
 


Não copiei os txt propositalmente para não inflar o mentawai.jar em 350k!

Faz um ant csc que ele vai gerar csc.jar, daí basta incluir isso no classpath da aplicação.


Sergio Oliveira

IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Concorco com vc Sérgio acho que pode ser um JAR separado mesmo...

Acho que vc deveria adotar como os grandes frames fazem, e um usuario (infelizmente não lembro o nome - desculpe) um dia desses comentou algo "relativo" a isso.

Vc poderia fazer algo assim, tipo o hibernate ta fazendo:

- mentawai.jar -> GERALZÃO TEM TUDO
- mentawai-csc.jar -> Contem tudo que é relacionadas ao lance ai
- mentawai-algomais.jar -> bla bla bla

Quem sabe isso fique interessante, vale a pena discutir sobre isto.

Ou o cara usa o GERALZAO, mas que ele não quer paises não precisa disso no jar por exemplo. ai ele usa o mentawai-base.jar sei lah.

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Sim... é a tag ajaxSelect que jah havia feito, esta no war do link..
só fiz a action pra fungar..

Enquanto a o jar separado tambem concordo, mas eu de ant nao
entendo quase nada...

faz as configurações ai no ant e blz...

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

robertwgil wrote:
Sim... é a tag ajaxSelect que jah havia feito, esta no war do link..
só fiz a action pra fungar..
 


Isso não é tão simples assim, mas vou dar uma olhada e se necessário fazer ajustes... (Vc está escondendo o combo quando não tem países? O combo se auto-preenche quando dá um erro de validação ou quando coloco no output e dou um forward?)


Enquanto a o jar separado tambem concordo, mas eu de ant nao
entendo quase nada...

faz as configurações ai no ant e blz...
 


Eu ajeito isso... Basta vc dar um ant csc que ele vai gerar csc.jar.


Sergio Oliveira

robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

bom aproveitei a tag que já havia feito.... com essas features que vc esta
falando tenho que ver depois...

da uma olhada no war.... acho que vai ser mais complicadinho doque
imaginava entao...

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Rapaz, estava pensando..... vai ser fods fazer os combos virem selecionados,
caso haja erro de validação.... teria que haver a validação ajax tambem,
para nao ter reflesh.

vo pensar em alguma forma aqui. mas sei nao heim..


e em relação aos combos, quando nao houver estados etc.. esconder
assim como o Sergio disse, acho que devem ser tres tags que
trabalham em conjunto uma para gerar cada select....

dão ideia ae galera.. pq o trem é pedreira

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Não é foda não... Se der erro e a coisa estiver no input, ele pega do input...

Se não tiver no input, tenta pegar do Output...

Todas as tags do Mentawai usam isso... Pode deixar que eu faço isso, pois eu sei como fazer isso sem problemas...

E a parte de enconder o combo (ou mostrar apenas o estado "-") quando o país não tiver estado?


Sergio Oliveira

robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

acho que esconder é meio estranho pois pode deixar um "buraco" no meio
do layout, da para deixa-lo como disabled e valor null

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

robertwgil wrote:
acho que esconder é meio estranho pois pode deixar um "buraco" no meio
do layout, da para deixa-lo como disabled e valor null 


Pode mostrar um estado "-" dentro do combo box apenas...

Repare que apesar de um país não ter estados, ele terá um estado apenas que será o "-" que servirá parar fazer o link do país com suas cidades...

Sergio Oliveira

dzinerduwebs



Joined: 19/08/2010 07:34:29
Messages: 1
Location: ?
Offline

Salve \o/ Programmers

após inúmeras pesquisas em querer encontrar uma rotina que me retorna-se todos os paises, estados e cidades mundiais não obtive sucesso, e vejo que muitos estão atrás disso também, por isso que arregacei as mangas e fiz esse combo-box abaixo usando a API do site ... http://ws.geonames.org, Obs : ainda estou testando, mais a base de dados acredito que não esteja 100 %

Acabou saindo isso ... http://du.somee.com/combo.asp


?
[WWW] [Yahoo!] [MSN] [ICQ]
 
Forum Index -> Comentários Gerais
Go to:   
Powered by JForum 2.1.6 © JForum Team