MaxLength não funciona em todos componentes

19 respostas
jsfprimefaces
R

Estou utilizando o primefaces e preciso utilizar o maxLength, porém ele só funciona em alguns componentes, como o inputText, ele funciona, mas no inputNumber já não funciona, e se eu colocar convertNumber no inputText ele também não funciona.

Existe alguma outra forma de se fazer esse controle?

19 Respostas

M

O atributo correto seria maxlength e não maxLength, da uma conferida ai…
E aproposito, aqui funciona corretamente

<p:inputNumber maxlength="3"></p:inputNumber>
R

@Mike Eu digitei errado apenas aqui, na página está maxlength, mas mesmo assim não funciona.

Estranho funcionar ai, eu pesquisei e vi falando que por padrão ele não funciona para Number por uma questão de design mesmo

R

A questão do inputNumber eu consegui resolver de outra forma, porém nesse caso que eu preciso de um pattern ele n funciona.

<p:inputText id="valor" maxlength="5" value="#{aicController.selected.valor}" title="#{bundle.CreateAicTitle_valor}" required="true" requiredMessage="Preencha o campo Valor." >
       <f:convertNumber pattern="#,##0.00"/>
 </p:inputText>
M

Seria isso aqui que você precisa?

<p:inputNumber id="valor" value="#{aicController.selected.valor}" maxValue="99999.99" title="#{bundle.CreateAicTitle_valor}" padControl="true" decimalSeparator="," symbol="R$" thousandSeparator="." required="true" requiredMessage="Preencha o campo Valor."></p:inputNumber>
R

Aqui está dizendo que o padControl não está definido no componente do primefaces

M

Qual a versão do seu PrimeFaces?
Eu estou usando a 6.2

R

Versão 6.0

O que esse componente faz?

M

padControl força a ficar com 00 nas casas decimais
Ex: 50 vai para 50.00

R

Entendi, vou ver se é viável eu atualizar para esta versão

M

Talvez o padrão do padControl seja true, ai nem precisa por.
No seu caso, testa o que eu te mandei sem o padControl

R

Sem o padControl, quando eu digito 1234, fica 1.234 e não 12,34 como eu gostaria que ficasse

M

O padControl so força o 00, ele não irá transformar 1234 em 12,34

R

Então não teria como eu utilizar, eu precisaria de um pattern="#,##0.00", mas o inputNumber não suporta isso.

M

O que você pode fazer é criar isso na mão, utilizando ajax.
A cada tecla que der, chama um método, se o conteudo tiver tamanho 2, adiciona uma virgula, se tiver 5, adiciona um ponto

R

Eu tenho uma jquery que faz isso, só que ela inibi o max, e não fica um limite, haha

M

Hahaha, uma vez eu fiz com cpf, com valor monetario não deve ser tão diferente.
Qualquer coisa só dar um toque.

Eu não sei outra solução pro seu caso :frowning:

R

O problema está sendo exatamente com a precisão que eu preciso colocar, ele não ta enxergando como um número dentro da jQuery pra fazer esse limite, quando defino a precisão pra 0, ele funciona direito, mas ai não fica 12,34 ao digitar 1234. Acho que vou ter de deixar sem limite mesmo.

M

La para as 20:00 vou tentar fazer o que eu te disse, eu estava afim de fazer algo parecido mesmo.
Se quiser tentar quebrar a cabeça em outra coisa do seu projeto, quebra ae haha
Ai assim que eu conseguir, posto aqui a solução.

R

Beleza, estou corrigindo outras coisas aqui.

Criado 13 de março de 2018
Ultima resposta 13 de mar. de 2018
Respostas 19
Participantes 2