JSF - Validar jogando excecao [RESOLVIDO]

1 resposta
rollei

Pessoal eu fiz alguns validadores customizados para JSF. Soh que esses validadores estao jogando excecoes na hora em que a pagina eh carregada. Mesmo jogando as excecoes os validadores estao funcionando normalmente … mas mesmo assim eu queria acabar com essa mensagem de erro que polui muito o log da aplicacao e do tomcat

vou colocar o log do erro e uma das classes de validacao.

erro:

java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1206)
        at org.apache.myfaces.taglib.core.ValidatorImplTag.createValidator(ValidatorImplTag.java:69)
        at javax.faces.webapp.ValidatorELTag.doStartTag(ValidatorELTag.java:47)
        at org.apache.jsp.jsp.planejamento.planejamento_jsp._jspx_meth_f_005fvalidator_005f2(planejamento_jsp.java:3066)
        at org.apache.jsp.jsp.planejamento.planejamento_jsp._jspx_meth_rich_005finplaceInput_005f5(planejamento_jsp.java:3035)
        at org.apache.jsp.jsp.planejamento.planejamento_jsp._jspx_meth_h_005fpanelGrid_005f5(planejamento_jsp.java:2877)
        at org.apache.jsp.jsp.planejamento.planejamento_jsp._jspx_meth_h_005fpanelGrid_005f2(planejamento_jsp.java:1950)
        at org.apache.jsp.jsp.planejamento.planejamento_jsp._jspx_meth_rich_005fpanel_005f1(planejamento_jsp.java:1813)
        at org.apache.jsp.jsp.planejamento.planejamento_jsp._jspx_meth_rich_005fpanel_005f0(planejamento_jsp.java:1704)
        at org.apache.jsp.jsp.planejamento.planejamento_jsp._jspService(planejamento_jsp.java:526)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
        at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:338)
        at org.apache.myfaces.application.jsp.JspViewHandlerImpl.buildView(JspViewHandlerImpl.java:480)
        at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:334)
        at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
        at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:189)
        at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
        at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:147)
        at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:256)
        at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:362)
        at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:488)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at br.gov.ce.seplag.sdp.filter.FiltroAutenticacao.doFilter(FiltroAutenticacao.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

obs: o metodo at br.gov.ce.seplag.sdp.filter.FiltroAutenticacao.doFilter eh soh um filtro que eh executado antes de todas as paginas carregarem, ele verifica se o usuario esta logado, por isso ele esta aparecendo na pilha do erro

classe:

public class CPFValidator implements Validator {
    
    private static final int[] pesoCPF = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};

    public void validate(FacesContext context, UIComponent component,
            Object obj) throws ValidatorException {
        String cpf = (String)obj;
        if (!isValidCPF(cpf)) {
            FacesMessage message = new FacesMessage();
            message.setDetail(component.getId() + ": CPF digitado não é valido");
            message.setSummary("CPF inválido");
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(message); 
        }
    }

    private static boolean isValidCPF(String cpf) {
        Pattern p = Pattern.compile("^[0-9]{3}\\.[0-9]{3}\\.[0-9]{3}-[0-9]{2}$");
        Matcher m = p.matcher(cpf);
        Boolean matchFound = m.matches();
        Boolean cpfValido = false;
        if (matchFound) {
            cpf = cpf.substring(0, 3) + cpf.substring(4, 7) + cpf.substring(8, 11) + cpf.substring(12, 14);
            System.out.println(cpf);
            if ((cpf == null) || (cpf.length() != 11) ||
                    cpf.equals("[telefone removido]") || cpf.equals("[telefone removido]") ||
                    cpf.equals("[telefone removido]") || cpf.equals("[telefone removido]") ||
                    cpf.equals("[telefone removido]") || cpf.equals("[telefone removido]") ||
                    cpf.equals("[telefone removido]") || cpf.equals("[telefone removido]") ||
                    cpf.equals("[telefone removido]") || cpf.equals("[telefone removido]")) {
                return false;
            }
            Integer digito1 = calcularDigito(cpf.substring(0, 9), pesoCPF);
            Integer digito2 = calcularDigito(cpf.substring(0, 9) + digito1, pesoCPF);
            cpfValido = cpf.equals(cpf.substring(0, 9) + digito1.toString() + digito2.toString());
        }
        return cpfValido;
    }

    private static int calcularDigito(String str, int[] peso) {
        int soma = 0;
        for (int indice = str.length() - 1, digito; indice >= 0; indice--) {
            digito = Integer.parseInt(str.substring(indice, indice + 1));
            soma += digito * peso[peso.length - str.length() + indice];
        }
        soma = 11 - soma % 11;
        return soma > 9 ? 0 : soma;
    }

}

e na jsp a chamada do validador:

<h:outputText value="CPF: " />
                                <rich:inplaceInput id="cpfBeneficiario"
                                                   value="#{PlanejamentoMB.cpfBeneficiario}"
                                                   required="true"
                                                   requiredMessage="Digite o cpf do beneficiário."
                                                   validatorMessage="O CPF digitado é inválido.(Ex: xxx.xxx.xxx-xx)"
                                                   converterMessage="Campo 'CPF:' inválido."
                                                   defaultLabel="Clique aqui e digite">
                                    <f:validator validatorId="CPFValidator" />
                                </rich:inplaceInput>

alguem pode me dar uma luz? porque dessa excecao??? :?

1 Resposta

rollei

aparentemente era um bug da versao do myfaces que eu estava usando (1.2.2). Depois de atualizar para a versao 1.2.4 os erros sumiram

Criado 20 de outubro de 2008
Ultima resposta 21 de out. de 2008
Respostas 1
Participantes 1