[RESOLVIDO]Primefaces InputMask com campos númericos

Pessoal, estou começando a utilizar o JSF2.0 com primefaces e estou apanhando com alguns componentes.

Minha dúvida é a seguinte, tenho um inputMask para cfp, conforme o código abaixo, a mascara aparece perfeitamente, porém no meu VO que está dentro do ManageBean o cpf é um Long, e o exemplo do primefaces só tem strings, o que acontece é que a validação não deixa eu continuar devido a mascara, alguém sabe como resolver esse problema, creio que seja uma solução simples.

inputMask

<p:inputMask id="cpf" value="#{controleUsuarioBean.usuario.numeroCpf}" mask="999.999.999-99" requiredMessage="Campo obrigatório não preenchido"/>
ManageBean

[code] private UsuarioVO usuario = null;
private Integer cep;
private TelefoneVO telefone = null;

public class UsuarioVO {

private Integer codigo;
private String login;
private String nome;
private Long numeroCpf;
private Date dataNascimento;
private EmpresaVO empresa = null;
private ContatoVO contato = null;

[/code]

Alguém me ajuda por favor…rs

Por que não deixa o CPF como String? Você vai fazer algum calculo com ele? Algo tipo CPF x quantidade = x? :?
O calculo pra validar cpf é feito de char em char, fica até mais fácil trabalhar com String.

Tudo bem, eu posso até deixar como String, deixei como Long para ficar mais fácil quando eu for passar para entity e persistir, assim não preciso fazer um Long.valueOf(), entendeu.

Mas mesmo se fosse string, não existe mascara para atributos númericos?

Sinceramente, não sei. Nunca utilizei para numéricos. Salve no banco como String também, assim não precisa de conversão.

Usa Convert do JSF para tirar a mascara então faz a validação só com números:

[code]
@FacesConverter(value=“convertInput”)
public class ConversoresInput implements Converter {

@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String valor) {
	if(valor != null || valor != "") {
		valor = valor.toString().replaceAll("[- /.]", "");
		valor = valor.toString().replaceAll("[-()]", "");
	}
	return valor;
}

@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object valor) {
	return valor.toString();
}

}[/code]

No JSF:

<p:inputMask mask="999.999.999-99" id="idCpf" value="#{usuario.facade.tecnico.numeroCPF}" 
	required="true" requiredMessage="Campo Obrigatório" maxlength="11" converter="convertInput" />

Lembrando que tanbém pode usar o validator do JSF.

jtiagoarruda , funcionou perfeitamente com o converter, obrigado brow!

[quote=jtiagoarruda]Usa Convert do JSF para tirar a mascara então faz a validação só com números:

[code]
@FacesConverter(value=“convertInput”)
public class ConversoresInput implements Converter {

@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String valor) {
	if(valor != null || valor != "") {
		valor = valor.toString().replaceAll("[- /.]", "");
		valor = valor.toString().replaceAll("[-()]", "");
	}
	return valor;
}

@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object valor) {
	return valor.toString();
}

}[/code]

No JSF:

<p:inputMask mask="999.999.999-99" id="idCpf" value="#{usuario.facade.tecnico.numeroCPF}" 
	required="true" requiredMessage="Campo Obrigatório" maxlength="11" converter="convertInput" />

Lembrando que tanbém pode usar o validator do JSF.[/quote]

Cara, me ajudou muito!

mas estranho é que na versão 3.4.2 eu não precisava desse converter, os valores já iam pro banco sem os caracteres especiais, atualizei pra versão 3.5 do primefaces e os erros começaram a surgir, tive que adicionar esse converter pra me manter na nova versão.

alguma sabe o porque?

Obrigado