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??? :?