[RESOLVIDO]Primefaces InputMask com campos númericos

8 respostas
R

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="[CPF removido]" requiredMessage="Campo obrigatório não preenchido"/>
ManageBean
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;

8 Respostas

R

Alguém me ajuda por favor…rs

ErickRAR

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.

R

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?

ErickRAR

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

jtiagoarruda

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

@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();
	}
}
No JSF:
<p:inputMask mask="[CPF removido]" 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.

R

jtiagoarruda , funcionou perfeitamente com o converter, obrigado brow!

F
jtiagoarruda:
Usa Convert do JSF para tirar a mascara então faz a validação só com números:
@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();
	}
}
No JSF:
<p:inputMask mask="[CPF removido]" 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.

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?

M

Obrigado

Criado 21 de julho de 2012
Ultima resposta 17 de mai. de 2013
Respostas 8
Participantes 5