Validar CPF ou CNPJ

7 respostas
java
L

Boa noite, pessoal tenho uma aplicação web que valida o CPF, até ai tranquilo, mas quero fazer a validação de CPF ou CNPJ conforme o cadastro for feito, segue trecho código xhtml.

<p:selectOneMenu id="tipo" value="#{clienteBean.cliente.tipo}" style="width:125px">
                                    <f:selectItem itemLabel="CPF:" itemValue="0" />
                                    <f:selectItem itemLabel="CNPJ:" itemValue="1" />
                                </p:selectOneMenu>

Xhtml onde faz a validação:

<p:inputText id="cpf_cnpj" label="cpf" value="#{clienteBean.cliente.cpf_cnpj}" maxlength="14" size="40"
                                             required="true" requiredMessage="Campo CPF/CNPJ é obrigatório">
                                              <f:validator validatorId="cpfValidator"/>
                                </p:inputText>

Como faço para validar o CPF ou CNPJ nesse caso?

7 Respostas

L

você pode enviar para seu f:validator o valor do atributo tipo via f:param e lá você faz a lógica do que deve validar

L

lucciano01 pode colocar um código de exemplo, eu sou novo nisso por favor

L

posta o form completo e a classe validator

L
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.org/ui"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                template="/resources/main.xhtml">

    <ui:define name="tarefas">
        <p:dialog header="Cadastrar Cliente" id="dialog" modal="false"
                  minWidth="1150" width="1150" height="440" closable="true" position="center"
                  widgetVar="modalLogin" draggable="true" resizable="false"
                  visible="true" maximizable="false">

            <p:tabView dynamic="true">
                <p:tab title="Cadastro">
                    <h:form id="form">
                        <p:growl id="growl" />
                        <!--Panel somente para deixar com um cara melhor nosso cadastro-->
                        <p:panel>

                            <h:panelGrid columns="4" cellpadding="4" cellspacing="4">
                                <h:outputLabel value="Nome:" for="nome" />
                                <!--veja o value chamando o Bean 
                                depois o objeto cliente e o atributo nome e assim segue os próximos-->
                                <p:inputText id="nome" label="nome" value="#{clienteBean.cliente.nome}" maxlength="50" size="50" 
                                             onkeyup="this.value = this.value.toUpperCase()" rendered="true" requiredMessage="Campo [NOME] é obrigatório"/>
                                <!--Essa parte vamos fazer em breve para somente adicionar CPF ou CNPJ nunca os dois-->   
                            </h:panelGrid>
                            
                            <h:panelGrid columns="4" cellpadding="5" cellspacing="5">
                                <p:selectOneMenu id="tipo" value="#{clienteBean.cliente.tipo}" style="width:125px">
                                    <f:selectItem itemLabel="CPF:" itemValue="0" />
                                    <f:selectItem itemLabel="CNPJ:" itemValue="1" />
                                </p:selectOneMenu>
                                <p:inputText id="cpf_cnpj" label="cpf" value="#{clienteBean.cliente.cpf_cnpj}" maxlength="14" size="40"
                                             required="true" requiredMessage="Campo CPF/CNPJ é obrigatório">
                                              <f:validator validatorId="cpfValidator"/>
                                               
                                </p:inputText>

                                <h:outputLabel value="Endereço" for="endereco" />
                                <p:inputText id="endereco" label="end" value="#{clienteBean.cliente.endereco}" maxlength="40" size="40" 
                                             onkeyup="this.value = this.value.toUpperCase()" required="true" requiredMessage="Campo ENDEREÇO é obrigatório"/>

                                <h:outputLabel value="Número" for="numero" />
                                <p:inputText id="numero" label="nro" value="#{clienteBean.cliente.numero}" maxlength="14" size="40"  />

                                <h:outputLabel for="cidade" value="Cidade.:" />
                                <p:selectOneMenu id="cidade" value="#{clienteBean.cliente.municipio}">
                                    <f:selectItems value="#{cidadeBean.cidades}" var="cidade"
                                                   itemValue="#{cidade.nome}"  
                                                   itemLabel="#{cidade.nome}"/>
                                </p:selectOneMenu>

                                <h:outputLabel for="estado" value="Estado.:" />
                                <p:selectOneMenu id="estado" value="#{clienteBean.cliente.estado}">
                                    <f:selectItems value="#{estadoBean.estados}" var="estado"
                                                   itemValue="#{estado.nome}"  
                                                   itemLabel="#{estado.nome}"/>
                                </p:selectOneMenu>

                                <h:outputLabel value="CEP:" for="cep" />
                                <p:inputText id="cep" label="mun" value="#{clienteBean.cliente.cep}" maxlength="14" size="40"  />

                                <h:outputLabel value="Dia Vencimento" for="diavencimento" />
                                <p:inputText id="diavencimento" label="mun" value="#{clienteBean.cliente.diavencimento}" maxlength="14" size="14"  />

                                <h:outputLabel for="boleto" value="Gera Boleto?" />
                                <p:selectOneMenu id="boleto" value="#{clienteBean.cliente.geraboleto}" 
                                                 required="true" requiredMessage="Campo BOLETO é obrigatório">
                                    <f:selectItem itemLabel="---Selecione---" itemValue=""/>		
                                    <f:selectItem itemValue="1" itemLabel="Sim" />
                                    <f:selectItem itemValue="2" itemLabel="Não" />
                                </p:selectOneMenu>

                                <h:outputLabel for="nf" value="Nota Fiscal?" />
                                <p:selectOneMenu id="nf" value="#{clienteBean.cliente.nf}"
                                                 required="true" requiredMessage="Campo NF é obrigatório">
                                    <f:selectItem itemLabel="---Selecione---" itemValue=""/>
                                    <f:selectItem itemValue="1" itemLabel="Sim" />
                                    <f:selectItem itemValue="2" itemLabel="Não" />
                                </p:selectOneMenu>

                            </h:panelGrid>
                            <!--Botão com utiliando a propriedade ActionListener executando o metodo salvar sem nenhuma regra de navegação, e atualizando todo o form, veja mais em http://codeerror.wordpress.com/2009/06/01/jsf-actionlistener-outra-possibilidade/-->
                            <p:commandButton id="btnSalvar" value="Salvar" icon="ui-icon-circle-check"
                                             actionListener="#{clienteBean.salvar}" update="@form"> 
                            </p:commandButton>    

                        </p:panel>
                    </h:form>
                </p:tab>


                <p:tab title="Consulta" id="table">
                    <!--criando minha tabela, incluido no value a lista de cliente, definino um variavel de acesso para cada registro, para acessar um unico registro-->
                    <p:dataTable id="tabela" value="#{clienteBean.clientes}" var="cli" emptyMessage="Nenhum registro incluido." paginator="true" rows="10">
                        <!--                    Definindo o cabeçalho da Tabela-->
                        <f:facet name="header">  
                            LISTA DE CLIENTES: 
                        </f:facet>
                        <!--Criando uma coluna para receber um determinando dado que tem em um objeto da nossa lista, nesse caso nome de cliente-->
                        <p:column headerText="NOME" style="text-align: center">
                            <!--Aqui onde acesso o objeto cli.nome e apresentamos na tabela, e assim com os seguintes-->
                            <h:outputText value="#{cli.nome}" />
                        </p:column>
                        <p:column headerText="CPF/CNPJ" style="text-align: center">
                            <!--nesse tem dois pois posso ter CPF ou CNPJ, vai aparecer os dois se tiver, pois não tratamos isso ainda-->
                            <h:outputText value="#{cli.cpf_cnpj}" />
                        </p:column>
                        
                        <p:column headerText="CIDADE - ESTADO" style="text-align: center">
                            <!--Coloquei os dois para termos melhor visualização do municipio e estado, isso é por cada um-->
                            <h:outputText value="#{cli.municipio} - #{cli.estado}" />
                        </p:column>
                        <p:column headerText="NF" style="text-align: center">
                            <h:outputText value="#{cli.nf==1?'SIM':'NÃO'}"/>
                        </p:column>

                        <p:column headerText="BOLETO" style="text-align: center">
                            <h:outputText value="#{cli.geraboleto==1?'SIM':'NÃO'}"/>
                        </p:column>

                        <p:column headerText="VENC." style="text-align: center">
                            <!--Coloquei os dois para termos melhor visualização do municipio e estado, isso é por cada um-->
                            <h:outputText value="#{cli.diavencimento}" />
                        </p:column>

                        <p:column headerText="DIAS VENCIDO" style="text-align: center">
                            <!--Coloquei os dois para termos melhor visualização do municipio e estado, isso é por cada um-->
                            <h:outputText value="" />
                        </p:column>

                        <p:column headerText="ALTERAR - EXCLUIR" style="text-align: center">
                            <h:form>
                                <!--Abaixo o botão editar com uma Action do nosso metodo editar que criamos no Bean-->
                                <p:commandButton action="#{clienteBean.editar}" icon="ui-icon-check" title="Editar" ajax="false"  >
                                    <!-- Abaixo temos o setPropertyActionListener que é utilizado para pegar o objeto cli e setar no objeto cliente la no nosso bean, para editarmos-->
                                    <f:setPropertyActionListener value="#{cli}" target="#{clienteBean.cliente}" />
                                </p:commandButton>
                                <!-- Abaixo temos o botão excluir com a propriedade onclick contendo o nome do modal e acessando um método de abri-lo que é o show, também existe o hide que é para feixa-lo.-->
                                <p:commandButton  action="#{clienteBean.excluir}" title="Ecluir" icon="ui-icon-trash" onclick="if (!confirm('Confirma a exclusão do usuário #{cli.nome}?')) return false;" 
                                                  style="margin-left: 5px"  ajax="false" update="@form:table">
                                    <!-- Abaixo temos o setPropertyActionListener que é utilizado para pegar o objeto cli e setar no objeto cliente la no nosso bean, para posteriomente excluirmos-->
                                    <f:setPropertyActionListener value="#{cli}" target="#{clienteBean.cliente}" />
                                </p:commandButton>
                               
                            </h:form>
                        </p:column>
                    </p:dataTable>
                </p:tab>

                <p:tab title="Relatórios">
                    <p:panel>

                        <h:panelGrid columns="1" cellpadding="4" cellspacing="4">
                            <h:outputLabel value="Relatório de Clientes:" for="nome" />
                            <br/>
                        </h:panelGrid>


                        <h:panelGrid columns="4" cellpadding="4" cellspacing="4">
                            <h:form id="impressao">
                                <a href="../ExecutaRelatorioCadastroUsuarios" target="blank">
                                    <img src = "../resources/imagens/icone_pdf.png" 
                                         height="64" width="64"></img></a>
                            </h:form>
                        </h:panelGrid>

                    </p:panel>
                </p:tab>
            </p:tabView>
        </p:dialog>

    </ui:define>        

</ui:composition>
L

<p:selectOneMenu id="tipo" value="#{clienteBean.cliente.tipo}" style="width:125px"> <f:selectItem itemLabel="CPF:" itemValue="0" /> <f:selectItem itemLabel="CNPJ:" itemValue="1" /> <f:attribute name = "tipo" value="#{clienteBean.cliente.tipo}" </p:selectOneMenu> no validator vc pega o valor do tipo assim: String tipo = (String) component.getAtributes( ).get("tipo"); daí lá vc valida de acordo com o tipo passado

L

Não consegui resolver dessa forma, tem algum exemplo dentro do xhtml ?

L

Por que não utilizar dois campos separados?, ou melhor criar dois componentes para que os mesmos sejam reutilizados no projeto. Um exemplo de como ficaria o XHTML:

<h:panelGrid columns="4" cellpadding="5" cellspacing="5">
    <p:selectOneMenu id="tipo" value="#{clienteBean.cliente.tipo}" style="width:125px">
	<f:selectItem itemLabel="CPF:" itemValue="0" />
	<f:selectItem itemLabel="CNPJ:" itemValue="1" />
	
	<p:ajax update="panelCpfCnpj" process="@this" partialSubmit="true" />
    </p:selectOneMenu>

    <h:panelGrid id="panelCpfCnpj" columns="1">
	<p:inputMask id="cnpj" validator="br.com.control.validator.CnpjValidator"  value="#{clienteBean.cliente.cnpj}"
		mask="99.999.999/9999-99" rendered="#{clienteBean.cliente.tipo == 1}" size="13" 
		required="true" requiredMessage="Campo CNPJ é obrigatório" />
	
	<p:inputMask id="cpf" validator="br.com.control.validator.CpfValidator" value="#{clienteBean.cliente.cpf}" 
		mask="[CPF removido]" rendered="#{clienteBean.cliente.tipo == 0}" size="11" 
		required="true" requiredMessage="Campo CPF é obrigatório" />
    </h:panelGrid>
...
</h:panelGrid>
Criado 13 de janeiro de 2016
Ultima resposta 20 de jan. de 2016
Respostas 7
Participantes 3