Senhores, boa tarde!
Antes de mais nada, desculpem pela falta de tags apropriadas a este tópico: não me foram sugeridas as que sempre uso para estes casos (Primefaces e JSF). Algumas coisas mudaram desde a última vez que postei alguma dúvida.
Estou tentando de todo jeito fazer algo que um cliente me pediu e não estou conseguindo, mas é algo com cara de problema que alguém já resolveu: preciso fazer um inputMask com uma máscara dinâmica que, se a String estiver vazia ou for até do tamanho de um CPF, a máscara é de CPF. Se passar do 12o caracter, então a máscara precisa mudar para a de CNPJ. Não posso usar um Radio Button ou algo do gênero para trocar a renderização de input: o mecanismo precisa ser de acordo com quantidade
O que eu tentei primeiro foi isso aqui:
<p:inputMask value="#{meuMB.entidade.cpfCnpj}" mask="#{meuMB.mascara}"> <p:ajax listener="#{meuMB.updateMascara}" event="keypress" update="@this" />
O método que atualiza a máscara não tem nada de mais:
public void doUpdateInputCpfCnpj(AjaxBehaviorEvent event) { if (filtroVO == null || filtroVO.getCpfCnpj().length() < 12) { this.cpfCnpjMascara = "9?99.999.999-999"; } else { this.cpfCnpjMascara = "9?9.999.999/9999-99"; } }
Bem, isto não funciona porque o keypress faz o input ser atualizado a cada tecla que eu digito, ou seja: eu digito o primeiro caractere e ele apaga o que foi digitado.
Alguém tem alguma boa solução para isso?