Campo Documento que aceita CNPJ,CPF e RG

24/10/2014

0

Pessoal, preciso fazer uma aplicação que aceite os três tipos de documentos no mesmo campo, que seria um campo Documento.

Para eu saber qual é o documento que irei receber, criei um campo chamado Tipo Docto, com uma combo que recebe CNPJ, CPF ou RG.

Beleza, até aí tudo bem.

O problema é quanto ao uso das anotações:

1. Sendo um único campo para os três tipo de documento, não posso usar a Anotação CNPJ ou CPF na Entity Class, para verificar se o CNPJ ou CPF é válido

Nota: A plicação precisa funcionar dessa maneira, porque estou criando apenas uma interface web para uma aplicação que roda em Delphi, portanto precisa usar o mesmo modelo de dados. Em Delphi, é simples pra mim fazer isso, mas em Java, eu ainda não sei a melhor maneira de fazer.

Em Delphi, por exemplo, eu trato isso no Front End. Formato o campo no Evento OnClick/onEnter e trato estes dados no onExit através de uma classe.

Pergunta:

Como eu poderia simular isso no Java ?

A idéia seria eu criar uma classe que verificasse o CPF e CNPJ através do Algorítimo Modulo 11 e Modulo 12 da receita, isso para os casos de CPF e CNPJ. Quanto ao RG simplesmente eu passo. Infelizmente preciso acho que preciso reinventar a roda nesse caso, ou NÃO ? Acaso existe uma classe que já faz isso, como no caso da Anotação ?

E quanto a formatação ao entrar no campo, eu preciso variar entre CNPJ, CPF e RG com base no conteúdo definido no campo Tipo Docto, simulando o evento onClick / onEnter do Delphi. Alguém sabe como faço isso ?

Nota: Peguei um Js de formatação de CNPJ, CPF, CEP e TELEFONE, mas ele só funciona com base no conteúdo do próprio campo.

Me ajuda aí galera...
Jeremias

Jeremias

Responder

Post mais votado

29/10/2014

1 - Primeiro você tem que definir o onChange, disparando um método que muda a máscara no seu mangedBean
//XHTML
<h:selectOneMenu value="#{meuBean.tipoDocumento}"   >  
  
     <f:selectItems value="#{meuBean.tipos}" var="empresa" itemValue="#" itemLabel="#"/>  
  
     <f:ajax event="change"  immediate="true" listener="#{meuBean.mudarMascara()}" update="inputMaskDocumento" />    
  
</h:selectOneMenu>  


//ManagedBean
private String mascara;

public void mudarMascara(){
   if (tipo.equals("CPF") {
    mascara = "999.999.999-99";
   }else if ...
 //TODO: Continue seu código aqui
}


No seu inputMask do primefaces você faz assim:

<p:inputMask mask="#{meuBean.mascara}" value="#{meuBean.documento}" id="inputMaskDocumento" />

Ronaldo Lanhellas

Ronaldo Lanhellas
Responder

Mais Posts

28/10/2014

Ronaldo Lanhellas

Bom, primeiro preciso saber quais frameworks você está usando : JSF ? JPA/Hibernate ? ...

Enfim, vou partir de um principio mais genérico tentando abstrair tais frameworks.

1 - Para assimilar mais rápido a solução vamos supor que você vai aplicar o campo "documento" em uma entidade chamada Pessoa;
2 - Esse atributo será do tipo String, mais ou menos assim:
public class Pessoa{
  private String documento;
}

3 - Se você está trabalhando com JSF, pode criar um selectOneMenu no XHTML que faça a seleção do tipo de documento (RG, CPF ou CNPJ) e ele crie uma formatação em um inputText conforme o usuário selecionar o tipo do documento.
Responder

28/10/2014

Jeremias

Bom, primeiro preciso saber quais frameworks você está usando : JSF ? JPA/Hibernate ? ...

Enfim, vou partir de um principio mais genérico tentando abstrair tais frameworks.

1 - Para assimilar mais rápido a solução vamos supor que você vai aplicar o campo "documento" em uma entidade chamada Pessoa;
2 - Esse atributo será do tipo String, mais ou menos assim:
public class Pessoa{
  private String documento;
}

3 - Se você está trabalhando com JSF, pode criar um selectOneMenu no XHTML que faça a seleção do tipo de documento (RG, CPF ou CNPJ) e ele crie uma formatação em um inputText conforme o usuário selecionar o tipo do documento.


Sim, é isso mesmo que preciso Ronaldo;

Tenho um selecOneMenu no cadastro, onde o usuário define o Tipo de Documento (RG, CPF, CNPJ) e tenho um campo documento.

Quando o usuário selecionar CPF, quero formatar o campo Documento pra receber CPF e quando selecionar CNPJ quero formatar o campo Documento pra receber CNPJ.

Quero também que ao sair do campo Documento, o conteúdo deste seja verificado por uma classe que irei criar para fazer a validação do CNPJ, CPF, uma vez que não posso usar as anotações @CPF ou @CNPJ no campo Documento da entidade pessoa, pois posso receber RG, CPF ou CNPJ neste campo.

Uso JPA 2.0 + JSF 2.2
Responder

04/11/2014

Jeremias

É isso mesmo Ronaldo, só estou com um pequeno problema com a tag update. O NetBeans acusa erro de marcação, ou seja, ela não pode ser usada com <f:ajax />.

Dei uma verificada, e ela não aparece como opção.

Mesmo assim compila normalmente, mas por algum motivo não está executando a mudarMascara. Vou fazer mais alguns teste e te reporto.
Responder

05/11/2014

Ronaldo Lanhellas

Desculpe eu digitei errado, use o AJAX do primefaces e não do JSF.

Em vez de:
 <f:ajax event="change"


faça:
 <p:ajax event="change"


onde, 'p' é o meu alias para o primefaces, o seu pode ser outro.
Responder

24/04/2016

Sgrandini

Ronaldo,

Meu problema é parecido com o do Jeremias, só que no meu caso não estou usando Primefaces, e sim JSF puro. Como então posso conseguir mudar a formatação do input já que o atributo "update" não existe no "f:ajax"?

Grata.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar