Máscara p:inputMask [Primefaces]

4,184 views
Skip to first unread message

Leonardo Ribeiro

unread,
Mar 22, 2012, 9:03:29 AM3/22/12
to jav...@googlegroups.com
Pessoal,

Tenho um campo que é "percentual" com valores

mínimo = 0,0
máximo = 100,00

Estou usando um p:inputMask e a propriedade mask="999,99" mas com isso além de eu poder digitar um  valor maior do que 100,00
eu sou obrigado a informar 051,00 (com o zero inicial) quando preciso informar 51%.

Alguém saberia me dizer como posso resolver isso? Tem algum componente com valor mínimo e máximo para que eu não precise controlar
na mão?

--
[]'s
Leonardo

Linux User #488650
Ubuntu User #27045
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece

Rafael Pestano

unread,
Mar 22, 2012, 9:32:00 AM3/22/12
to jav...@googlegroups.com
Leonardo,

o primefaces extension tem um componente que faz isso, da uma olhada aqui: http://fractalsoft.net/primeext-showcase-mojarra/sections/inputNumber/basicUsage.jsf


espero que ajude.
 
Att,

Rafael M. Pestano

Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
Graduando em Ciência da Computação UFRGS
@realpestano



De: Leonardo Ribeiro <leojr...@gmail.com>
Para: jav...@googlegroups.com
Enviadas: Quinta-feira, 22 de Março de 2012 10:03
Assunto: [javasf] Máscara p:inputMask [Primefaces]

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil


Leonardo Ribeiro

unread,
Mar 22, 2012, 9:53:29 AM3/22/12
to jav...@googlegroups.com
Opa..
Parece que vai me atender sim Rafael porém o site esta off, não consigo fazer o download
Vou esperar um pouco para ver se volta.

2012/3/22 Rafael Pestano <rmpe...@yahoo.com.br>

Rafael Pestano

unread,
Mar 22, 2012, 9:58:26 AM3/22/12
to jav...@googlegroups.com
pra mim tá on, o endereço é este: http://code.google.com/p/primefaces-extensions/

acho que para baixar o extensions só via maven no momento pois na seção de downloads só tem o showcase para baixar: http://code.google.com/p/primefaces-extensions/downloads/list

se você não usa maven baixe o showcase e pegue o jar na pasta web-inf/lib do WAR 
 
Att,

Rafael M. Pestano

Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
Graduando em Ciência da Computação UFRGS
@realpestano



De: Leonardo Ribeiro <leojr...@gmail.com>
Para: jav...@googlegroups.com
Enviadas: Quinta-feira, 22 de Março de 2012 10:53
Assunto: Re: [javasf] Máscara p:inputMask [Primefaces]

Rafael Pestano

unread,
Mar 22, 2012, 10:03:57 AM3/22/12
to jav...@googlegroups.com
 
Att,

Rafael M. Pestano

Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
Graduando em Ciência da Computação UFRGS
@realpestano



De: Rafael Pestano <rmpe...@yahoo.com.br>
Para: "jav...@googlegroups.com" <jav...@googlegroups.com>
Enviadas: Quinta-feira, 22 de Março de 2012 10:58

Leonardo Ribeiro

unread,
Mar 22, 2012, 10:41:13 AM3/22/12
to jav...@googlegroups.com
Beleza,

Baixei mas estranhamente não está funcionando.

coloquei no xhtml conforme showcase


<pe:inputNumber id="tfPercentual" value="#{myMB.percentual}" minValue="0.0" maxValue="100.00"/>


Mas o campo renderizado (inputNumber) se comporta com um inputtext deixando informar letras e números não obedecendo os valores mínimos e máximos
Coloquei os jars primefaces-extensions-0.4.0 e commons-lang3-3.1.jar no meu projeto




2012/3/22 Rafael Pestano <rmpe...@yahoo.com.br>

Marcelo Caser

unread,
Mar 22, 2012, 11:05:44 AM3/22/12
to jav...@googlegroups.com
Kra, fiz o teste aqui e funcionou normal... aceitando apenas numeros e no formato indicado...

Phillip Tessuto

unread,
Mar 22, 2012, 9:09:36 AM3/22/12
to jav...@googlegroups.com
Leonardo,

Dê uma olhada aqui :
http://livedemo.exadel.com/richfaces-demo/richfaces/inputNumberSpinner.jsf?c=inputNumberSpinner&tab=usage

Abs,
Phillip Tessuto
 
Web Developer
 

T: (55 11) 5102-2880 | ramal 19
@: phillip...@webtraffic.com.br
S: webtraffic.com.br



De: "Leonardo Ribeiro" <leojr...@gmail.com>
Para: jav...@googlegroups.com
Enviadas: Quinta-feira, 22 de Março de 2012 10:03:29

Assunto: [javasf] Máscara p:inputMask [Primefaces]

Everton Fujimoto

unread,
Mar 22, 2012, 9:11:39 AM3/22/12
to jav...@googlegroups.com
p:spinner?

Att.
Everton William Fujimoto
Hecate Systems
CIO
(47)3394-5516
(47)9947-5481



--

Ricardo Anastácio de Souza

unread,
Mar 22, 2012, 9:19:38 AM3/22/12
to jav...@googlegroups.com
Sugiro que faça assim:

<p:inputText id="nome">
   <f:convert type="percent" />
</p:inputText>

Rafael Pestano

unread,
Mar 22, 2012, 11:55:31 AM3/22/12
to jav...@googlegroups.com
qual versão do primefaces você está utilizando? o pf-ext 0.4 só é compativel com primefaces 3.2 para cima pois a arquitetura do prime mudou nessa ultima versão.

o pf-ext 0.3 é compativel com as versões anteriores do prime mas não possui o componente que você precisa.

 
Att,

Rafael M. Pestano

Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
Graduando em Ciência da Computação UFRGS
@realpestano



De: Marcelo Caser <marcel...@gmail.com>
Para: jav...@googlegroups.com
Enviadas: Quinta-feira, 22 de Março de 2012 12:05

Leonardo Ribeiro

unread,
Mar 22, 2012, 12:37:09 PM3/22/12
to jav...@googlegroups.com
É a versão 3.2 com mojarra 2.1.7

2012/3/22 Rafael Pestano <rmpe...@yahoo.com.br>

Leonardo Ribeiro

unread,
Mar 22, 2012, 1:01:20 PM3/22/12
to jav...@googlegroups.com
É eu coloquei o componente na minha tela de login para teste e funcionou...
Agora tenho que ver o pq não funciona na tela de cadastro

2012/3/22 Leonardo Ribeiro <leojr...@gmail.com>

Leonardo Ribeiro

unread,
Mar 22, 2012, 1:16:40 PM3/22/12
to jav...@googlegroups.com
Uma constatação é que quando eu coloco o componente no meu xhtml de início a tela congela (nenhum botão funciona) simplesmente trava...
Aí se eu der um F5 tudo funciona normalmente inclusive esse componente inputNumber.

Q estranho!!!

Rafael Pestano

unread,
Mar 22, 2012, 1:19:59 PM3/22/12
to jav...@googlegroups.com
tá dando algum erro de js? 

te aconselho a postar o erro no forum, o forum do primefaces tem uma seção só para projeto de extensão: http://forum.primefaces.org/viewforum.php?f=14
 
Att,

Rafael M. Pestano

Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
Graduando em Ciência da Computação UFRGS
@realpestano



De: Leonardo Ribeiro <leojr...@gmail.com>
Para: jav...@googlegroups.com
Enviadas: Quinta-feira, 22 de Março de 2012 14:16

Flavio Cysne

unread,
Mar 22, 2012, 3:15:07 PM3/22/12
to jav...@googlegroups.com
Leonardo,

    dá p/ fazer tudo no p:inputMask, o que precisa é definir suas próprias máscaras usando o jQuery.mask.definitions. Isto é melhor explicado na resposta deste tópico http://stackoverflow.com/questions/8848346/how-to-restrict-an-input-to-numbers-only-with-primefaces-inputmask-element. Neste link ele recomenda este dois links: http://digitalbush.com/projects/masked-input-plugin/ e http://courses.coreservlets.com/Course-Materials/pdf/jsf/jsf2/PrimeFaces-Input-Elements-2.pdf

Pode incluir no jQuery.mask.definitions o alias 'd' para o regex '[0-9]', e usar a propriedade mask como "b99?,99", desta forma não fica obrigado a colocar o 0 no começo da máscara e também não precisa usar ,00 p/ os casos em que não tem decimal (Ex.: 90, 85, 73).

Espero ter ajudado.
Flávio Cysne

Em 22 de março de 2012 10:03, Leonardo Ribeiro <leojr...@gmail.com> escreveu:
--

Leonardo Ribeiro

unread,
Mar 22, 2012, 10:49:45 PM3/22/12
to jav...@googlegroups.com
Flávio,

Estive pesquisando mesmo sobre usar regex. Baixei o jquery.js e jquery.maskedinput.js
No jquery.maskedinput.js alterei o seguinte:

(function($) {
var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask";
var iPhone = (window.orientation != undefined);

$.mask = {
//Predefined character definitions
definitions: {
'd': "[0-9]",
'a': "[A-Za-z]",
'*': "[A-Za-z0-9]"
},
dataName:"rawMaskFn"
};


E o meu inputMask

<p:inputMask id="tfpercent" value="#{myMB.percent}" mask="b99?,99"/>

só que a máscara aparece o "b99,99" e não consigo alterar, fica esse valor "fixo" no componente
Se eu coloco mask="d99,99" aí eu consigo alterar o primeiro valor (referente a 'd') mas o restante fica fixo também.

O que será que estou fazendo de errado?  

2012/3/22 Flavio Cysne <flavi...@gmail.com>

Flavio Cysne

unread,
Mar 23, 2012, 7:36:35 AM3/23/12
to jav...@googlegroups.com
Leonardo,

    em relação à máscara, foi erro meu. A máscara correta é d99?,99, pois o alias no mask.definitions 'd' e não 'b'. No caso não precisa baixar nenhum outro componente ou plugin do jquery, essa máscara é do próprio <p:inputMask/>. O problema deve estar relacionado à sobrescrita do mask.definitions. você deveria adicionar uma nova máscara e não sobrescrever os valores já presentes na propriedade. Você olhou os links que te mandei?

    Adicione o alias 'd' usando essa sintaxe: $.mask.definitions['d']='[1]'; ; ou se preferir assim: $.mask.definitions['1']='[1]';
    A máscara, seguindo os exemplos acima, ficaria assim mask="d99?,99" ou mask="199?,99", respectivamente.

    O alias '9'='[0-9]' já existe no mask.definitions, então apenas adicione novos valores, não os sobrescreva.

Espero ter ajudado.
Flávio Cysne

Leonardo Ribeiro

unread,
Mar 23, 2012, 1:55:02 PM3/23/12
to jav...@googlegroups.com
Flávio,

Não preciso baixar nada então?
É que seguindo o link era dito para incluir

<script src="jquery.js" type="text/javascript"></script>
<script src="jquery.maskedinput.js" type="text/javascript"></script>
mas beleza.. se não precisa melhor ainda..
Agora pode me explica melhor como eu faço para adicionar, qual arquivo eu adiciono uma nova máscara "mask.definitions" ?

obrigado desde já

2012/3/23 Flavio Cysne <flavi...@gmail.com>

Flavio Cysne

unread,
Mar 23, 2012, 2:38:48 PM3/23/12
to jav...@googlegroups.com
O exemplo é referente a uma página comum que queira usar o inputMask do jQuery. No caso do Primefaces esse já é o plugin utilizado p/ o <p:inputMask/>

P/ adicionar a máscara utilize o código abaixo em um bloco de script:

jQuery(function($){
   $
.mask.definitions['~']='[+-]';
   $
("#eyescript").mask("~9.99 ~9.99 999");
});
Atenciosamente,
Flávio Cysne.

Riccardo felipe Taddei mascarenhas

unread,
Mar 23, 2012, 11:22:25 AM3/23/12
to jav...@googlegroups.com
Caros,

Só por curiosidade, mas deixa eu ver se não entendi errado pq não sei muito de regex...

O Leonardo quer uma mascara que vá de 0 - 100, correto? Se colocar o regex  (baseando no mail abaixo do flávio) 
'd99?,99' ele não vai permitir até 199,99?



De: Flavio Cysne <flavi...@gmail.com>
Para: jav...@googlegroups.com
Enviadas: Sexta-feira, 23 de Março de 2012 8:36

Assunto: Re: [javasf] Máscara p:inputMask [Primefaces]

Ricardo Anastácio de Souza

unread,
Mar 22, 2012, 1:56:10 PM3/22/12
to jav...@googlegroups.com
Não vejo necessidade de se incluir mais uma dependência (se for somente para isso),  se a própria implementação JSF já possui a tag <f:convert>.

Flavio Cysne

unread,
Mar 26, 2012, 2:48:35 PM3/26/12
to jav...@googlegroups.com
@Riccardo Felipe

sim, vai permitir entrar com um valor até 199,99, mas não tenho tanto conhecimento sobre o que o masked input do jquery aceita, então foi o que eu achei de mais próximo ao que o Leonardo queria.

@Ricardo Anastacio

o Leonardo pediu ajuda com a máscara p/ não permitir a entrar de valores maiores do que 100. o <f:convert/> é resolvido do lado servidor e, também, não tem haver com a limitação de valores.

@Leonardo

o que o Riccardo Felipe falou me faz acreditar que a máscara será o menor dos seus problemas. Utilizando um <f:validateDoubleRange minimum="0.0" maximum="100.0"/> seria melhor, eu acho.

http://javaserverfaces.java.net/nonav/docs/2.0/pdldocs/facelets/f/validateDoubleRange.html


Espero ter ajudado.
Flávio Cysne

Em 22 de março de 2012 14:56, Ricardo Anastácio de Souza <ricardoan...@gmail.com> escreveu:
Não vejo necessidade de se incluir mais uma dependência (se for somente para isso),  se a própria implementação JSF já possui a tag <f:convert>.

Ricardo Anastácio de Souza

unread,
Mar 27, 2012, 10:38:48 AM3/27/12
to jav...@googlegroups.com
@Flávio

Respondi a pergunta inicial dele, sugeri o convert para formatação (era o que ele deixou claro) já na continuação dos posts e como você sugeriu a validateDoubleRange resolveria a questão de faixa de valores.
Até aí seriam duas tags somente. E ainda considero o f:convert necessário em termos de view para o usuário. Não sei porque toda essa complicação num problema tão simples.
Reply all
Reply to author
Forward
0 new messages