Clique aqui para ler esse artigo em PDF.![]()
Struts Multipáginas
Cadastros passo a passo com Struts
Crie uma aplicação Struts com um cadastro em múltiplos passos utilizando recursos do Struts 1.1
O Apache Struts é hoje o mais popular framework MVC para web. Seus recursos atraem os que buscam melhor organização das aplicações, utilização de padrões de projeto na camada web e ganho de produtividade, dentre outros benefícios. Devido à sua API bastante extensa, porém, muitos não extraem todo o potencial do Struts; acabam limitando-se aos recursos básicos do framework como mapeamento e controle de ações, preenchimento de JavaBeans e redirecionamento de páginas de retorno.
Neste artigo vamos criar um cadastro em vários passos (uma funcionalidade muito comum em aplicações web), utilizando diversos recursos interessantes do Struts. Vários desses recursos surgiram no Struts 1.1, mas ainda são pouco conhecidos, entre eles a classe DispatchAction, os DynaActionForms, a tradução automática de beans e validações customizadas. Vários outros artigos da Java Magazine já abordaram conceitos básicos do Struts – consulte as Edições 6 e 7, 11 e 19.
Este artigo tem enfoque bastante prático, desenvolvendo-se em torno de um exemplo único. Em resumo, a aplicação de exemplo é composta por: páginas JSP (o View); extensões de classes do Struts, que fazem o papel do Controller; um DAO (Data Access Object) e JavaBeans, compondo o Model. Como se vê, a aplicação segue a arquitetura MVC (veja mais sobre MVC no artigo "Servlets no Tomcat 5", nesta edição).
Na aplicação de exemplo, os dados são cadastrados em dois passos, um para informações pessoais e outro para as de contato. Ao final é mostrado um resumo dos dados fornecidos. Veja na Figura 1 um diagrama de atividades que mostra o fluxo básico da aplicação, e na Figura 2 a tela inicial, listando os dados de amostra. A Figura 3 mostra os passos do cadastro em execução.
Dinamizando os ActionForms
Sabemos que o Struts suporta o preenchimento automático de beans a partir da submissão de formulários HTML. Para isso basta criar classes que estendam ActionForm e contenham atributos com nomes iguais aos dos tags do formulário, além de fazer configurações simples no struts-config.xml. O quadro "Aplicação mínima com ActionForms comuns" mostra um exemplo (com apenas as partes essenciais de cada arquivo envolvido).
Aplicação mínima com ActionForms comuns
|
Exemplo.jsp ... <form action="acao.do" method="post"> <input name="nome" type="text"> </form> ... |
MeuForm.java package forms; public class MeuForm extends ActionForm { private String nome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } |
|
struts-config.xml ... <action path="/acao" type="actions.MeuAction" name="meuForm" /> ... |
MeuAction.java package actions; public class MeuAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // código de execução da ação } } |
Uma desvantagem aqui é a necessidade de se criar várias subclasses de ActionForm ligadas diretamente aos formulários HTML. Para solucionar o problema, podemos utilizar instâncias de DynaActionForm (que chamaremos "forms dinâmicos"). DynaActionForm é uma subclasse de ActionForm cujos atributos são criados dinamicamente a partir de configurações no struts-config.xml, sem a necessidade de implementar classes para os forms. Para usar o máximo de recursos do Struts, vamos usar a classe DynaValidatorForm, que é uma subclasse de DynaActionForm com suporte a validação. As configurações são mostradas na Listagem 1.
A principal desvantagem de usar forms dinâmicos é que, com eles, não são gerados erros na compilação, já que as consultas e atribuições a propriedades são realizadas através de chamadas do tipo get("NomePropriedade") e ...