[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

E

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?

E

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

J

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