Esse artigo faz parte da revista Java Magazine edição 38. Clique aqui para ler todos os artigos desta edição

 

 

: left" align=left>O Struts oferece muitas funcionalidades para o tratamento de entrada de dados, mas possui ainda algumas limitações nessa área. Quem utiliza o framework sabe da dificuldade para se tratar, por exemplo, datas e números decimais, e acaba utilizando strings para representar algumas informações que vêm do usuário.

Quando o usuário entra com valores em um formulário e os envia, estes chegam ao servidor em forma de strings. O Struts tenta converter essas strings para os formatos mapeados no FormBean (classe que representa um formulário), e caso não consiga, recebemos erros pouco explicativos ou páginas em branco; ou os valores podem ser tratados de forma equivocada. Por exemplo, em uma data como 10/03/06, o mês será 10, 03 ou 06? Para nós brasileiros, fica claro que o mês é março – mas e para o sistema?

Uma das soluções mais utilizadas é criar métodos no FormBean para tratar os dados enviados. Dessa forma, existiriam no FormBean dois métodos: um para converter para o tipo correto, no momento da entrada dos dados, e outro para converter para string no momento da exibição. O problema dessa solução é que ela se repetirá para todos os formulários que precisam da conversão, além de não se aplicar aos DynaActionForms (representações dinâmicas de formulários configuradas no struts-config.xml). Aqui veremos uma solução alternativa, que oferece vantagens.

Solução proposta

Para demonstrar nossa solução, vamos construir uma aplicação simples, com uma página JSP, um FormBean e uma Action. Usaremos uma classe concreta para representar o formulário, mas poderíamos igualmente utilizar um DynaActionForm. O exemplo completo está disponível no site da Java Magazine.

O JSP, como mostra a Listagem 1, constrói um formulário com dois campos de texto; o primeiro para uma data e o segundo para um número decimal. Note que para a construção do formulário utilizamos as tags do Struts <html:form> e <html:text>.

 

Listagem 1. index.jsp: Página com o formulário de exemplo.

<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:form action="/PostFormularioAction">

    Data: <html:text property="data" /><br />

    Valor: <html:text property="valor" /><br />

  <html:submit/>

</html:form>

 

O FormBean que representa este formulário terá dois atributos, um do tipo java.util.Date e outro do tipo java.math.BigDecimal. Veja a Listagem 2; observe que não temos atributos do tipo String. Isso porque faremos o Struts configurar o FormBean com os tipos de dados corretos, ou seja, o próprio framework irá converter os dados enviados pelo usuário para Date e BigDecimal.

A Action tem uma implementação simples. Ela fará apenas um forward para o JSP com o formulário (veja a Listagem 3). Nosso objetivo aqui é fazer com que o Struts configure o FormBean com seus devidos atributos. Não nos importa neste ponto o que será feito depois com estes valores.

A Listagem 4 mostra o conteúdo do arquivo struts-config.xml. A configuração é simples. Primeiro definimos um formulário dentro do elemento <form-beans>, com dois atributos: nome e classe. Usamos o nome formBeanTeste e a classe FormBeanTeste.

 

Listagem 2. FormBeanTeste.java: Classe que representa o formulário, com dois campos: um Date e outro BigDecimal.

package br.com.jm.formbean;

 

import java.math.BigDecimal;

import java.util.Date;

import org.apache.struts.action.ActionForm;

...

Quer ler esse conteúdo completo? Tenha acesso completo