quinta-feira, 24 de março de 2016

Formatação de campos de valor Monetário

        Trabalhar com valores monetários em páginas WEB é meio chato, porém vou mostrar duas maneiras de facilitar esse trabalho, uma é do próprio primefaces, e outra é com JQuery, que funciona em qualquer aplicação web, bastando configurar corretamente.

         Primeiro vamos a solução com primefaces, que é uma biblioteca de extensão que deve ser adicionada ao projeto. Vamos então configurar no arquivo pom.xml o seguinte:

<dependencies>
    ...   
    <dependency>
        <groupId>org.primefaces.extensions</groupId>
        <artifactId>primefaces-extensions</artifactId>
        <version>4.0.0</version>
    </dependency>
    ...
</dependencies>

         Depois, temos que adicionar na página xhtml o namespace da extensão do primefaces no topo da página:

xmlns:pe="http://primefaces.org/ui/extensions"

         E então podemos usar a biblioteca de extensão para formatarmos os componentes que guardarão valores monetários.

<pe:inputNumber id="valor" value="#{meuManagedBean.valor}" symbol=" R$" 
symbolPosition="s" decimalSeparator="," thousandSeparator="." decimalPlaces="2/>

Caso dê algum erro de conversão, você pode adicionar o seguinte componente:

<pe:inputNumber id="valor" value="#{meuManagedBean.valor}" symbol=" R$"
symbolPosition="s" decimalSeparator="," thousandSeparator="." decimalPlaces="2>

<f:convertNumber maxFractionDigits="2" minFractionDigits="2"/>

</pe:inputNumber>

Agora vamos fazer a biblioteca JQuery-MaskMoney. Basta fazer o download da biblioteca no link http://plentz.github.io/jquery-maskmoney, lá tem o arquivo zip para baixar. Então crie o diretório “js” dentro da pasta resources em webapp como mostra a imagem a seguir:



Se você trabalha com templates do facelets basta adicionar isso no cabeçalho do template, se não, terá que adicionar nas paginas que irá precisar. Dentro do header coloque:

<h:outputScript library="js" name="jquery.maskMoney.js"/>

      Dentro do body, no final crie a função:

<script>

function configurarMoeda(objeto){
$(objeto).maskMoney({decimal: ",", thousands: ".", allowZero: true, symbolStay: "R$"});
       }
      
</script>
        
         Então basta chamar no componente que deseja usar da seguinte forma:
 
<p:inputText id="valorUnitario" value="#{meuManagedBean.valorUnitario }" 
onfocus="configurarMoeda(this);">
        <f:convertNumber maxFractionDigits="2" minFractionDigits="2"/>
<p:inputText>


     Se você não trabalha com primefaces, no link do download do JQuery-MaskMoney você vai encontrar ajuda para usar a biblioteca. Abraços!
            
ATENÇÃO! <pe:inputnumber> foi removido das extensões do PF e agora faz parte do pacote principal, então nas versões mais recentes, simplesmente substitua <pe:inputNumber> por <p:inputNumber>.

Links úteis:



2 comentários:

  1. Olá,
    Ao tentar implementar o obtive o seguinte erro:
    Unable to find resource primefaces, primefaces.css
    Unable to find resource primefaces, primefaces.js
    Isso na versão mais atual PrimeFaces e primefaces.extensions versão 6.1.0

    ResponderExcluir
    Respostas
    1. Olá, foi removido das extensões do PF e agora faz parte do pacote principal, então nas versões mais recentes, simplesmente substitua por . Vou colocar essa observação na postagem. Obrigado pelo comentário. :)

      Excluir