[RESOLVIDO] Meu converter do JSF não está funcionando no Jetty

1 resposta
J

Recentemente criei uma aplicação com JSF, Primefaces, Spring e JPA, inicialmente para usar no Tomcat. Como me preocupei em criar uma aplicação independente do servidor/servlet container, ela rodou normalmente no JBoss AS 7, com um mínimo de ajuste no Maven. Resolvi então testar o Jetty, que por acaso é o servidor do GUJ (http://www.guj.com.br/paginaquenaoexiste), mas curiosamente um de meus converters, aliás o mais simples, não funcionou. Trata-se de um converter bem simples que retira a máscara do CPF digitado no formulário:

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

@FacesConverter(value="cpfConverter")
public class CPFConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String str) {
		if((str == null) || (str.isEmpty()))
			return null;
		if(str.length() < 14)			
			return str;
		String cpf = str.substring(0, 3) + str.substring(4, 7) + str.substring(8, 11) + str.substring(12, 14);
		return cpf;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object obj) {
		String str = obj.toString();
		if(str.length()<11)
			return str;
		return str.substring(0,3) + "." + str.substring(3,6) + "." + str.substring(6, 9) + "-" + str.substring(9, 11);
	}
	
}

No meu formulário está assim:

<p:inputMask mask="[CPF removido]" id="cpf" value="#{usuarioBean.usuario.cpf}" converter="cpfConverter" />

Ao acessar a página que o referencia, a seguinte exceção é lançada:

javax.faces.FacesException: Erro de expressão: Objeto denominado: cpfConverter não encontrado.

O curioso é que possuo converters de entidades do meu banco que funcionam normalmente. Nelas, a única diferença é que, como preciso acessar meus beans, estão anotadas como @Component e no campo do formulário coloco converter="#{entidadeConverter}". Pois bem, fiz o mesmo com o CPF, o erro sumiu, mas também não converte nada.

Alguém já passou por situação semelhante?? Isto está me parecendo algum bug mesmo com o Jetty, já que nos outros servidores funciona normal.

Acho que vou ficar mesmo com o tomcat, apesar de que o jetty me pareceu muito mais leve.

Um abraço a todos!

1 Resposta

J

ok, encontrei o erro bobo:

if(str.length() < 14)

Com a máscara, o CPF tem um total de 14 caracteres. Que mancada! rsrs
O correto é:

if(str.length() < 15)

Mas, de qualquer forma, no Jetty só funciona se utilizar converter="{qualquerConverter}", diferentemente do tomcat, que aceitou converter=“qualquerConverter” sem as chaves.

Como estou utilizando Spring no lugar dos managed beans do JSF, não sei se com JSF esse erro também ocorre.

Criado 31 de outubro de 2012
Ultima resposta 20 de nov. de 2012
Respostas 1
Participantes 1