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:inputTextid="cpf_cnpj"label="cpf"value="#{clienteBean.cliente.cpf_cnpj}"maxlength="14"size="40"required="true"requiredMessage="Campo CPF/CNPJ é obrigatório"><f:validatorvalidatorId="cpfValidator"/></p:inputText>
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
Lfbdsan
lucciano01 pode colocar um código de exemplo, eu sou novo nisso por favor
L
lucciano01
posta o form completo e a classe validator
L
Lfbdsan
<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><ui:compositionxmlns="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:definename="tarefas"><p:dialogheader="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:tabViewdynamic="true"><p:tabtitle="Cadastro"><h:formid="form"><p:growlid="growl"/><!--Panel somente para deixar com um cara melhor nosso cadastro--><p:panel><h:panelGridcolumns="4"cellpadding="4"cellspacing="4"><h:outputLabelvalue="Nome:"for="nome"/><!--veja o value chamando o Bean depoisoobjetoclienteeoatributonomeeassimsegueospróximos--><p:inputTextid="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:panelGridcolumns="4"cellpadding="5"cellspacing="5"><p:selectOneMenuid="tipo"value="#{clienteBean.cliente.tipo}"style="width:125px"><f:selectItemitemLabel="CPF:"itemValue="0"/><f:selectItemitemLabel="CNPJ:"itemValue="1"/></p:selectOneMenu><p:inputTextid="cpf_cnpj"label="cpf"value="#{clienteBean.cliente.cpf_cnpj}"maxlength="14"size="40"required="true"requiredMessage="Campo CPF/CNPJ é obrigatório"><f:validatorvalidatorId="cpfValidator"/></p:inputText><h:outputLabelvalue="Endereço"for="endereco"/><p:inputTextid="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:outputLabelvalue="Número"for="numero"/><p:inputTextid="numero"label="nro"value="#{clienteBean.cliente.numero}"maxlength="14"size="40"/><h:outputLabelfor="cidade"value="Cidade.:"/><p:selectOneMenuid="cidade"value="#{clienteBean.cliente.municipio}"><f:selectItemsvalue="#{cidadeBean.cidades}"var="cidade"itemValue="#{cidade.nome}"itemLabel="#{cidade.nome}"/></p:selectOneMenu><h:outputLabelfor="estado"value="Estado.:"/><p:selectOneMenuid="estado"value="#{clienteBean.cliente.estado}"><f:selectItemsvalue="#{estadoBean.estados}"var="estado"itemValue="#{estado.nome}"itemLabel="#{estado.nome}"/></p:selectOneMenu><h:outputLabelvalue="CEP:"for="cep"/><p:inputTextid="cep"label="mun"value="#{clienteBean.cliente.cep}"maxlength="14"size="40"/><h:outputLabelvalue="Dia Vencimento"for="diavencimento"/><p:inputTextid="diavencimento"label="mun"value="#{clienteBean.cliente.diavencimento}"maxlength="14"size="14"/><h:outputLabelfor="boleto"value="Gera Boleto?"/><p:selectOneMenuid="boleto"value="#{clienteBean.cliente.geraboleto}"required="true"requiredMessage="Campo BOLETO é obrigatório"><f:selectItemitemLabel="---Selecione---"itemValue=""/><f:selectItemitemValue="1"itemLabel="Sim"/><f:selectItemitemValue="2"itemLabel="Não"/></p:selectOneMenu><h:outputLabelfor="nf"value="Nota Fiscal?"/><p:selectOneMenuid="nf"value="#{clienteBean.cliente.nf}"required="true"requiredMessage="Campo NF é obrigatório"><f:selectItemitemLabel="---Selecione---"itemValue=""/><f:selectItemitemValue="1"itemLabel="Sim"/><f:selectItemitemValue="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:commandButtonid="btnSalvar"value="Salvar"icon="ui-icon-circle-check"actionListener="#{clienteBean.salvar}"update="@form"></p:commandButton></p:panel></h:form></p:tab><p:tabtitle="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:dataTableid="tabela"value="#{clienteBean.clientes}"var="cli"emptyMessage="Nenhum registro incluido."paginator="true"rows="10"><!-- Definindo o cabeçalho da Tabela--><f:facetname="header">LISTADECLIENTES:</f:facet><!--Criando uma coluna para receber um determinando dado que tem em um objeto da nossa lista, nesse caso nome de cliente--><p:columnheaderText="NOME"style="text-align: center"><!--Aqui onde acesso o objeto cli.nome e apresentamos na tabela, e assim com os seguintes--><h:outputTextvalue="#{cli.nome}"/></p:column><p:columnheaderText="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:outputTextvalue="#{cli.cpf_cnpj}"/></p:column><p:columnheaderText="CIDADE - ESTADO"style="text-align: center"><!--Coloquei os dois para termos melhor visualização do municipio e estado, isso é por cada um--><h:outputTextvalue="#{cli.municipio} - #{cli.estado}"/></p:column><p:columnheaderText="NF"style="text-align: center"><h:outputTextvalue="#{cli.nf==1?'SIM':'NÃO'}"/></p:column><p:columnheaderText="BOLETO"style="text-align: center"><h:outputTextvalue="#{cli.geraboleto==1?'SIM':'NÃO'}"/></p:column><p:columnheaderText="VENC."style="text-align: center"><!--Coloquei os dois para termos melhor visualização do municipio e estado, isso é por cada um--><h:outputTextvalue="#{cli.diavencimento}"/></p:column><p:columnheaderText="DIAS VENCIDO"style="text-align: center"><!--Coloquei os dois para termos melhor visualização do municipio e estado, isso é por cada um--><h:outputTextvalue=""/></p:column><p:columnheaderText="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:commandButtonaction="#{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:setPropertyActionListenervalue="#{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:commandButtonaction="#{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:setPropertyActionListenervalue="#{cli}"target="#{clienteBean.cliente}"/></p:commandButton></h:form></p:column></p:dataTable></p:tab><p:tabtitle="Relatórios"><p:panel><h:panelGridcolumns="1"cellpadding="4"cellspacing="4"><h:outputLabelvalue="Relatório de Clientes:"for="nome"/><br/></h:panelGrid><h:panelGridcolumns="4"cellpadding="4"cellspacing="4"><h:formid="impressao"><ahref="../ExecutaRelatorioCadastroUsuarios"target="blank"><imgsrc="../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
lucciano01
<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
Lfbdsan
Não consegui resolver dessa forma, tem algum exemplo dentro do xhtml ?
L
Leme
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:panelGridcolumns="4"cellpadding="5"cellspacing="5"><p:selectOneMenuid="tipo"value="#{clienteBean.cliente.tipo}"style="width:125px"><f:selectItemitemLabel="CPF:"itemValue="0"/><f:selectItemitemLabel="CNPJ:"itemValue="1"/><p:ajaxupdate="panelCpfCnpj"process="@this"partialSubmit="true"/></p:selectOneMenu><h:panelGridid="panelCpfCnpj"columns="1"><p:inputMaskid="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:inputMaskid="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>