Método pra validar campos do formulário [Resolvido]

9 respostas
S

Pessoal boa tarde,

Primeiramente quero me desculpar pelo título, não sei se é correto dizer validar campos ao invés de validar componentes (é que venho de estrutura procedural, sabe como é, rsrsrs), mas minha curiosidade é a seguinte:

Onde trabalho um dos desenvolvedores criou alguns componentes (ainda não sei bem como funciona, mas vou correr atrás, rsrsrs) pra utilizarmos em nossos projetos, e particularmente ficou show de bola, todos os componentes como JTextField, JPasswordField, assim por diante, possuem mensagens de aviso, erro, informação, possuem também o status de obrigatoriedade, muito interessante.

Agora indo pra minha curiosidade… Precisei criar um método que varresse todos os componentes obrigatórios, sendo que estavam em várias abas, ou seja, dentro de vários containeres, pesquisando um pouco sobre método recursivo, criei o método abaixo:

public void validaCampos(Container painel){
  Component[] cp = painel.getComponents();
  for(int i=0; i<cp.length; i++){
    if(cp[i] instanceof JTextField && ((JTextField)cp[i]).isObrigatorio()){
      // mensagem de preenchimento
    }
    if(cp[i] instanceof JPasswordField && ((JPasswordField)cp[i]).isObrigatorio()){
      // mensagem de preenchimento
    }
     
    // outros campos a serem validados aqui

    if(cp[i] instanceof Container){
      validaCampos((Container)cp[i]); // aqui eu uso recursividade
    }
  }
}

está funcionando belezinha, mas minha curiosidade é se estou seguindo legal a orientação a objetos, ou estou fugindo muito do conceito, o meu “pulo do gato” realmente foi o teste que verifica se é container e chama o método novamente, assim se eu quiser colocar mais componentes em alguma aba, não corro o risco de perdê-lo na validação, só preciso incluí-lo nesses testes caso ele seja algum que ainda nao foi utilizado.

pessoal agradeço muito se vocês puderem opinar, creio que muita gente também tem dúvida quanto a isso, e ao me ajudarem, estão ajudando mais pessoas também.

valeu e fico no aguardo.

9 Respostas

S

gostaria de esclarecer que pesquisei no fórum sobre isso, e a pesquisa não me retornou nada a respeito, caso eu esteja falando alguma coisa que já postaram, por favor me passem o link e moderador, por favor, remova o tópico ou mude o status para resolvido ok?

grato

guilherme.dio

entra nesse link: http://www.guj.com.br/java/245343-testem-meu-jar-de-validacao-dinamica

S

Cara primeiramente obrigado por responder e eu li rapidamente o arquivo de descrição do seu projeto, testarei o jar na segunda no trampo, que aqui em casa ta osso, rsrsrs.

Interessante o seu projeto, mas você também utiliza recursividade dentro do método valida ?

No meu caso o componente já possui grande parte da validação que precisa ser feita, como filtragem de caracteres, verificar integridade de dados inseridos e tudo mais, dai esse método que criei é uma coisa bem simples mesmo, comparando com seu projeto, o meu é fichinha, rsrsrs

valeu e abraço

guilherme.dio

rsrssr, na vdd o meu n é grande coisa, ele só ajuda em casos em que vc precisa validar um formulário de preenchimento normal, agora se vc tiver JDateChooser ou Formatted vai dar erro…mas qualquer outro funciona, inclusive se vc tiver vários JPanels dentro de outro(onde eu usei recursividade, pq pode haver infinitos JPanels, entao tive que retornar no método até chegar ao fim)…

más quebra um galho, tanto é que agora, toda vez que crio projeto novo ja incluo esse jar an aplicação…

a só um detalhe, pra ele mostrar os nomes dos campos que estão sem preencher ao inves de aparecer null, é só por o ‘name’ no component:

jTextField1.setName("CAMPO NOME");
S

entendi cara, bacana, um trabalho a menos na hora de criar outros projetos e não ter que fazer tudo de novo, mas na sua opinião, o método que criei está de acordo com OO, ou tá muito misturado, rsrsrs.

falou e abraço

guilherme.dio

Tá perfeito!

S

valeu cara, eu vou dar uma olhada no jar que vc disponibilizou e qualquer coisa a gente troca uma idéia beleza?

agora uma coisa, você tinha falado que ele da erro quando é JDateChooser certo?

da uma olhada na api que encontrei sobre ele: http://www.toedter.com/en/jcalendar/api/com/toedter/calendar/JDateChooser.html

lá tem um médtodo getDate(), será que vc verificando a instancia com o instanceof não vira:

if(componente instanceof JDateChooser){
  JDateChooser dc = ((JDateChooser)componente).getDate();
  Calendar cal = null;
  cal.setTimeInMillis(dc != null ? dc.getDate().getTime() : Calendar.getInstance()); // uso ternário apenas para não entrar nulo
}

será que isso não pode ajudar na sua aplicação? talvez a api traga mais soluções.

abraço

guilherme.dio

spidermanx:
valeu cara, eu vou dar uma olhada no jar que vc disponibilizou e qualquer coisa a gente troca uma idéia beleza?

agora uma coisa, você tinha falado que ele da erro quando é JDateChooser certo?

da uma olhada na api que encontrei sobre ele: http://www.toedter.com/en/jcalendar/api/com/toedter/calendar/JDateChooser.html

lá tem um médtodo getDate(), será que vc verificando a instancia com o instanceof não vira:

if(componente instanceof JDateChooser){
  JDateChooser dc = ((JDateChooser)componente).getDate();
  Calendar cal = null;
  cal.setTimeInMillis(dc != null ? dc.getDate().getTime() : Calendar.getInstance()); // uso ternário apenas para não entrar nulo
}

será que isso não pode ajudar na sua aplicação? talvez a api traga mais soluções.

abraço

então, da certo, eu mesmo ja coloquei, porém, para exportar o JAR, eu teria que inserir o jar do JDateChooser numa pasta lib, e toda vez que alguem adicionar o JValidator teria que colocar a pasta lib juntamnete com o JAR, então n fica prático

S

entendi

Criado 2 de julho de 2011
Ultima resposta 3 de jul. de 2011
Respostas 9
Participantes 2