Campo Documento que aceita CNPJ,CPF e RG
24/10/2014
0
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
Post mais votado
29/10/2014
//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
Mais Posts
28/10/2014
Ronaldo Lanhellas
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.
28/10/2014
Jeremias
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
04/11/2014
Jeremias
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.
05/11/2014
Ronaldo Lanhellas
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.
24/04/2016
Sgrandini
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.
Clique aqui para fazer login e interagir na Comunidade :)