Para facilitar o trabalho de desenvolvimento de uma aplicação, o JSF define um conjunto de con- versores padrão. Alguns desses conversores são aplicados automaticamente. Outros conversores são aplicados apenas se forem explicitamente indicados.
O JSF aplica automaticamente conversores padrão para os seguintes tipos fundamentais do Java: • BigDecimal • BigInteger • Boolean e boolean • Byte e byte • Character e char • Double e double
• Float e float • Integer e int • Long e long • Short e short
No exemplo abaixo, o conteúdo digitado na caixa de texto será convertido para o tipodouble automaticamente, pois a propriedadenumeroé do tipodouble.
1 @ M a n a g e d B e a n 2 p u b l i c c las s T e s t e B e a n { 3 4 p r i v a t e d o u b l e n u m e r o ; 5 6 // G E T T E R S E S E T T E R S 7 }
Código Java 10.1: TesteBean.java
1 <!-- O v alo r d i g i t a d o n es se cam po será c o n v e r t i d o para d o u b l e --> 2 <h:i n p u t T e x t v alu e=" #{ t e s t e B e a n . n u m e r o } " / >
Código XHTML 10.1: Caixa de texto vinculada à propriedadenumero
Personalizando Conversores Padrão
Alguns conversores padrão podem ou precisam usar informações adicionais para realizar a con- versão de dados. As tags<f:convertNumber>e<f:convertDateTime> são usadas para transmitir informações aos conversores de números (java.lang.Number) e datas (java.util.Date), respecti- vamente.
<f:convertNumber>
A tag<f:convertNumber>permite que conversões mais sofisticadas sejam feitas em valores nu- méricos.
Para estipular que um valor numérico seja exibido com um número máximo de casas decimais, podemos usar o atributo maxFractionDigitsda tag <f:convertNumber>. No exemplo abaixo, a propriedadenumerodo managed beantesteBeané exibida com no máximo duas casas decimais.
1 <h:o u t p u t T e x t v alu e=" #{ t e s t e B e a n . n u m e r o } " > 2 <f:c o n v e r t N u m b e r m a x F r a c t i o n D i g i t s=" 2 " / > 3 </h:o u t p u t T e x t>
Analogamente, podemos definir o número mínimo de casas decimais com o atributominFrac- tionDigits.
Podemos também definir a formatação de um número por meio de uma espécie de expressão regular. Isso pode ser feito usando o atributopattern, como no exemplo abaixo.
1 <h:o u t p u t T e x t v alu e=" #{ t e s t e B e a n . n u m e r o } " > 2 <f:c o n v e r t N u m b e r p a t t e r n=" # 0 . 0 0 0 " / > 3 </h:o u t p u t T e x t>
161 CONVERSÃO EVALIDAÇÃO Para apresentar dados na forma de porcentagem, podemos usar o atributotypee defini-lo com o valorpercent.
1 <h:o u t p u t T e x t v alu e=" #{ t e s t e B e a n . n u m e r o } " > 2 <f:c o n v e r t N u m b e r type=" p e r c e n t " / >
3 </h:o u t p u t T e x t>
Para personalizar a exibição de valores monetários, a tag<f:convertNumber>provê o atributo
currencySymbolelocale. No código abaixo, exemplificamos o uso desses dois atributos.
1 <h:o u t p u t T e x t v alu e=" #{ t e s t e B e a n . n u m e r o } " > 2 <f:c o n v e r t N u m b e r c u r r e n c y S y m b o l=" R$ " type=" c u r r e n c y " / > 3 </h:o u t p u t T e x t> 4 5 <h:o u t p u t T e x t v alu e=" #{ t e s t e B e a n . n u m e r o } " > 6 <f:c o n v e r t N u m b e r l o c a l e=" pt_ BR " type=" c u r r e n c y " / > 7 </h:o u t p u t T e x t> <f:convertDateTime>
A tag<f:convertDateTime>permite que conversões de datas sejam realizadas. Esse conversor pode ser aplicado em dados do tipojava.util.Date. Essa tag possui o atributopattern, que per- mite a definição do formato da data que desejamos utilizar.
1 <h:o u t p u t T e x t v alu e=" #{ t e s t e B e a n . data } "> 2 <f:c o n v e r t D a t e T i m e p a t t e r n=" dd / MM / yyyy " / > 3 </h:o u t p u t T e x t>
Para mais detalhes sobre o uso do atributopattern, consulte a páginahttp://docs.oracle. com/javase/7/docs/api/java/text/SimpleDateFormat.html.
Uma outra maneira de escolher o formato de data a ser utilizado é por meio do atributolocale. No exemplo abaixo, ao definir o valor do atributolocalecomopt_BR, o padrão de data utilizado será “dd/MM/yyyy”.
1 <h:o u t p u t T e x t v alu e=" #{ t e s t e B e a n . data } "> 2 <f:c o n v e r t D a t e T i m e l o c a l e=" pt_ BR " / > 3 </h:o u t p u t T e x t>
Exercícios de Fixação
1 Crie um projeto chamado K19-Conversao-e-Validacao seguindo os passos vistos no exercício do Capítulo5.
2 Crie uma classe chamada Funcionariopara modelar funcionários em um pacote chamado
br.com.k19.modelo.
1 p a c k a g e br . com . k19 . m o d e l o ; 2
3 i m p o r t java . util . Date ; 4
5 p u b l i c c las s F u n c i o n a r i o { 6 p r i v a t e D o u b l e s a l a r i o ; 7 p r i v a t e I n t e g e r c o d i g o ; 8 p r i v a t e Date a n i v e r s a r i o ; 9 10 // G E T T E R S E S E T T E R S 11 }
Código Java 10.2: Funcionario.java
3 Crie uma class chamada FuncionarioBean contendo um atributo do tipo Funcionario em um pacote chamado br.com.k19.controle.
1 p a c k a g e br . com . k19 . c o n t r o l e ; 2
3 i m p o r t br . com . k19 . m o d e l o . F u n c i o n a r i o ; 4 i m p o r t j ava x . f ace s . bean . M a n a g e d B e a n ; 5 6 @ M a n a g e d B e a n 7 p u b l i c c las s F u n c i o n a r i o B e a n { 8 p r i v a t e F u n c i o n a r i o f u n c i o n a r i o = new F u n c i o n a r i o () ; 9 10 // G E T T E R E S E T T E R 11 }
Código Java 10.3: FuncionarioBean.java
4 Crie uma página chamada cadastro.xhtml para cadastrar funcionários.
1 <!D O C T Y P E html P U B L I C " -// W3C // DTD XHT ML 1.0 T r a n s i t i o n a l // EN "
2 " http :// www . w3 . org / TR / x h t m l 1 / DTD / xhtml1 - t r a n s i t i o n a l . dtd "> 3
4 <html x mln s=" http :// www . w3 . org / 1 9 9 9 / xht ml "
5 x mln s:h=" http :// java . sun . com / jsf / html "
6 x mln s:f=" http :// java . sun . com / jsf / core "> 7 <h:head> 8 <t itl e> K19 T r e i n a m e n t o s </tit le> 9 </h:head> 10 11 <h:body> 12 <h1> C a d a s t r o de F u n c i o n á r i o </h1> 13 <h:form> 14 <h:p a n e l G r i d c o l u m n s=" 3 ">
15 <h:o u t p u t L a b e l v alu e=" S a l á r i o : R$ " for=" campo - s a l a r i o "/ >
16 <h:i n p u t T e x t id=" campo - s a l a r i o " val ue=" #{ f u n c i o n a r i o B e a n . f u n c i o n a r i o . s a l a r i o } "> 17 <f:c o n v e r t N u m b e r l o c a l e=" pt_ BR "/ >
18 </h:i n p u t T e x t>
19 <h:m e s s a g e for=" campo - s a l a r i o "/ > 20
21 <h:o u t p u t L a b e l v alu e=" C ó d i g o : " for=" campo - c o d i g o "/ >
22 <h:i n p u t T e x t id=" campo - c o d i g o " val ue=" #{ f u n c i o n a r i o B e a n . f u n c i o n a r i o . c o d i g o } "/ > 23 <h:m e s s a g e for=" campo - c o d i g o "/ >
24
25 <h:o u t p u t L a b e l v alu e=" Data : ( dd / MM / yyyy ) " for=" campo - a n i v e r s a r i o "/ > 26 <h:i n p u t T e x t id=" campo - a n i v e r s a r i o " 27 v alu e=" #{ f u n c i o n a r i o B e a n . f u n c i o n a r i o . a n i v e r s a r i o } "> 28 <f:c o n v e r t D a t e T i m e p a t t e r n=" dd / MM / yyyy "/ > 29 </h:i n p u t T e x t> 30 <h:m e s s a g e for=" campo - a n i v e r s a r i o "/ > 31 32 <h:c o m m a n d B u t t o n val ue=" C a d a s t r a r "/ > 33 </h:p a n e l G r i d> 34 <h:m e s s a g e s/ > 35 </h:form>
163 CONVERSÃO EVALIDAÇÃO 36 </h:body>
37 </html>
Código XHTML 10.8: cadastro.xhtml
5 Acesse a aplicação no endereço:
http://localhost:8080/K19-Conversao-e-Validacao/cadastro.xhtml
Preencha o formulário com valores inadequados diversas vezes e observe as mensagens de erros.
Exercícios Complementares
1 Crie um formulário para registrar a cotação do dólar. Esse formulário deve ter três campos obrigatórios. No primeiro, o usuário deve digitar o valor do dólar em reais. Esse campo deve estar associado a um conversor de números cujo tipo seja a moeda brasileira (use os atributoslocalee typeda tag<f:convertNumber>). O segundo campo deve guardar a variação do dólar, em porcenta- gem, com no máximo cinco dígitos na parte fracionária. No terceiro campo, o usuário deve colocar o horário e a data da cotação, cujo formato deve ser “HH:mm dd-MM-yyyy”.
2 Exiba na tela os valores que foram submetidos pelo formulário e convertidos.