Struts Aplicação de exemplo [email protected]. Aplicação de exemplo Vamos criar uma aplicação...
Transcript of Struts Aplicação de exemplo [email protected]. Aplicação de exemplo Vamos criar uma aplicação...
![Page 2: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/2.jpg)
Aplicação de exemplo• Vamos criar uma aplicação para ver os
principais componentes do Struts• Não faremos acesso ao banco de dados,
mas veremos as entradas onde ele pode ser usado
• Veremos algumas das melhores técnicas para gerenciar o emaranhado de classes, arquivos de configuração e lib’s de todo projeto java
![Page 3: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/3.jpg)
Primeiros passos• Crie a estrutura de diretórios para o projeto• Escreva o web.xml• Escreva o struts-config.xml• Escreva as classes ActionForm• Escreva as classes Action• Crie o arquivo de mensagens• Escreva as páginas JSP• Instale e teste sua aplicação
![Page 4: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/4.jpg)
AloMundo• Vamos criar um projeto
chamado AloMundo• Crie uma pasta chamada lib e
copie nela todas as nossas bibliotecas
• registre-as: botão direito -> Build Path -> Add to Build Path
• No fim de tudo, teremos algo parecido com a imagem ao lado
![Page 5: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/5.jpg)
AloMundo• Contém as classes de formulário, actions e
as lib’s do Struts• Nesse projeto teremos o processamento das
requisições, forwards e arquivos de mensagens*
• Representa o Model e o Controller do MVC• Não é interessante ter regras de negócio
aqui, mas esse é um assunto para outro curso
![Page 6: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/6.jpg)
Propriedades• Botão
direito no projeto -> Properties
• Guia Libraries
• Botão Add Variable
![Page 7: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/7.jpg)
Nova variável• Clique no botão
Extend...
![Page 8: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/8.jpg)
Lib do Tomcat• Vamos adicionar
algumas lib’s do Tomcat• As classes do Struts
precisam dessas bibliotecas
• Precisamos adicionar o commons-el, jsp-api e servlet-api
![Page 9: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/9.jpg)
Agora, a parte web• Vamos criar mais um projeto, dessa
vez será o AloMundoWeb• Aqui teremos as páginas web, folhas
de estilo, arquivos de configuração e taglib’s
• Representa a parte View do MVC• Copie as taglib’s para o diretório
informado na imagem ao lado• A imagem ao lado é do projeto no seu
final
![Page 10: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/10.jpg)
web.xml• Arquivo de configuração da aplicação web• Esse arquivo segue a especificação da Sun• Não é um arquivo de configuração do Struts
propriamente dito• Declara o servlet de controle do Struts, bem
com suas taglib’s
![Page 11: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/11.jpg)
web.xml<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN“ "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app> <display-name>Alo Mundo - Struts</display-name> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
![Page 12: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/12.jpg)
web.xml <!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
<taglib> <taglib-uri>/tags/struts-bean</taglib-uri> <taglib-location>/WEB-INF/lib/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-html</taglib-uri> <taglib-location>/WEB-INF/lib/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-logic</taglib-uri> <taglib-location>/WEB-INF/lib/struts-logic.tld</taglib-location> </taglib>
</web-app>
![Page 13: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/13.jpg)
struts-config.xml• Principal arquivo de configuração do Struts• Essa é sua primeira versão, onde iremos
apenas mostrar a página de boas-vindas da aplicação
![Page 14: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/14.jpg)
struts-config.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software
Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config> <action-mappings> <action path="/BemVindo" forward="/BemVindo.jsp" /></action-mappings>
</struts-config>
![Page 15: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/15.jpg)
struts-config.xml• A parte importante aqui é essa:
– <action path="/BemVindo“ forward="/BemVindo.jsp" />
• O path é o caminho referenciado pelo browser, com o sufixo “.do”
• O Struts irá abrir a página BemVindo.jsp
![Page 16: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/16.jpg)
index.jsp<body onLoad="window.location='BemVindo.do';">
![Page 17: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/17.jpg)
Cont.• Artifício de programação HTML para
redirecionar a aplicação para a página inicial
![Page 18: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/18.jpg)
BemVindo.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"%><%@ taglib uri="/tags/struts-html" prefix="html"%>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>.: Bem-Vindo :.</title><link rel="stylesheet" href="css/Estilo.css" type="text/css" /></head><body><table width=90% height=90%><tr><td align=center><table border><tr><td align=center>Esta é sua primeira aplicação Struts!<p><html:link href="TelaDeLogin.do">Tela de login</html:link><p><html:image src="imagens/ar_design.gif" /></tr></table></td></tr></table></html>
![Page 19: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/19.jpg)
Tags• struts-html: importa as taglibs com controles
html • Exemplos:
– html:link – tag para montar um link– html:image – tag para mostrar uma imagem
![Page 20: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/20.jpg)
Para acessar a aplicação• http://localhost:8080/alomundo• A url acima irá acessar a página index.jsp
que irá redirecionar a aplicação para BemVindo.do
• A partir desse momento o controller do Struts estará controlando a aplicação
![Page 21: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/21.jpg)
Atenção• A imagem está no link
http://marcoreis.net/imagens/ar_design.gif • A folha de estilo também:
http://marcoreis.net/css/Estilo.css • Todos os demais arquivos seguem o mesmo
princípio
![Page 22: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/22.jpg)
Próxima fase• Agora, vamos aumentar a complexidade da
nossa aplicação, adicionando mais alguns mapeamentos e arquivos
![Page 23: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/23.jpg)
MessageResources.properties#login.nome=Nome:login.senha=Senha:#errors.header=<table><tr><td>Erros no formulário</td></tr>errors.login.nome=<tr><td>Nome é obrigatório</td></tr>errors.login.senha=<tr><td>Senha incorreta</td></tr>errors.footer=</table>
![Page 24: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/24.jpg)
Mensagens• Podemos associar uma chave com uma
palavra/frase• errors.header e errors.footer fazem parte de
um padrão, representam o cabeçalho e rodapé da área de erros
![Page 25: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/25.jpg)
UsuarioFormpackage com.alomundo;import org.apache.struts.action.*;public class UsuarioForm extends ActionForm { private String nome; private String senha; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; }}
![Page 26: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/26.jpg)
UsuarioForm• O formulário de login propriamente dito• Deve ter um atributo para campo da tela• Os valores serão preenchidos
automaticamente pelo Controller• Cada tela terá seu próprio formulário
![Page 27: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/27.jpg)
struts-config.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"><struts-config> <form-beans> <form-bean name="usuarioForm" type="com.alomundo.UsuarioForm"></form-bean> </form-beans> <action-mappings> <action path="/BemVindo" forward="/BemVindo.jsp" /> <action path="/TelaDeLogin" forward="/TelaDeLogin.jsp" /> <action path="/EfetuarLogin" name="usuarioForm“
type="com.alomundo.LoginAction" attribute="usuario"> <forward name="Sucesso" path="/PaginaPrincipal.jsp" /> </action> </action-mappings> <message-resources parameter="MessageResources" /></struts-config>
![Page 28: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/28.jpg)
Variáveis de sessão• <form-beans>
– Todos os formulários da sua aplicação devem estar registrados
– Dessa maneira o framework pode mapear o conteúdo dos campos de sua página para os atributos de sua classe
![Page 29: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/29.jpg)
Nova versão do EfetuarLogin• Esse bloco de código representa uma ação típica de
uma aplicação Struts• O Struts cria uma variável de sessão do tipo
UsuarioForm chamada usuario e mapeia nela os campos da página
• Os nomes dos campos da página e do bean devem ser iguais
<action path="/EfetuarLogin" name="usuarioForm" type="com.alomundo.LoginAction" attribute="usuario">
![Page 30: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/30.jpg)
TelaDeLogin.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"%><%@ taglib uri="/tags/struts-html" prefix="html"%><%@ taglib uri="/tags/struts-bean" prefix="bean"%>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>.: Login :.</title><link rel="stylesheet" href="css/Estilo.css" type="text/css" /></head><body><table width=90% height=90%><tr><td align=center><table width=50% border><tr><td><table width=100%><html:form action="/EfetuarLogin"><tr><td colspan=2><html:errors />
![Page 31: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/31.jpg)
TelaDeLogin.jsp<tr><td><bean:message key="login.nome" /></td><td><html:text property="nome" name="usuario" /></td></tr><tr><td><bean:message key="login.senha" /></td><td><html:password property="senha" name="usuario" /></td></tr><tr><td colspan=2 align=center><html:submit value="Entrar" /></td></tr><tr><td colspan=2 align=center><html:image src="imagens/cup.gif" /></td></tr></html:form></table></td></tr></table></td></tr></table></body></html>
![Page 32: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/32.jpg)
TelaDeLogin.jsp• struts-bean: taglibs para manipulação de
beans• html:errors – mostra as mensagens de erro
que se aplicam para essa página• html:text/password – faz a ligação entre uma
caixa de texto e uma propriedade do bean (no caso, usuario)
• bean:message – recupera uma mensagem do arquivo de mensagens
![Page 33: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/33.jpg)
PaginaPrincipal.jsp<%@ taglib uri="/tags/struts-bean" prefix="bean"%><%@ taglib uri="/tags/struts-html" prefix="html"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>.: Alô Mundo - Struts :.</title><link rel="stylesheet" href="css/Estilo.css" type="text/css" /></head><body><table width=90% height=90%><tr><td align=center><table border><tr><td align=center>Bem-Vindo ao sistema, <bean:writename="usuario" property="nome" /><p><html:link href="BemVindo.do">Página Inicial</html:link><p><html:image src="imagens/T4.gif" /></p></td></tr></table></td></tr></table></html>
![Page 34: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/34.jpg)
Acesso a beans• Lembra que temos a variável de sessão usuario
preenchida com os valores informados na página?• Esse é o momento de acessá-la• No trecho seguinte estamos escrevendo na tela a
propriedade nome do bean usuario
<bean:write name="usuario" property="nome" />
![Page 35: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/35.jpg)
LoginActionpackage com.alomundo;
import javax.servlet.http.*;import org.apache.struts.action.*;
public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm
form, HttpServletRequest request, HttpServletResponse response) { UsuarioForm f = (UsuarioForm) form; System.out.println("Dados fornecidos pelo usuário:"); System.out.println("Nome:" + f.getNome()); System.out.println("Senha: " + f.getSenha()); return mapping.findForward("Sucesso"); }}
![Page 36: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/36.jpg)
LoginAction• O Controller executa o método execute• A variável f (UsuarioForm) já foi preenchida
com os valores da tela• A classe irá direcionar a aplicação para o
mapeamento Sucesso (veja no struts-config)
• Poderíamos direcionar para outro lugar se o usuário não fosse validado
![Page 37: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/37.jpg)
Versão final• Nossa aplicação conhecerá agora alguns
novos recursos• Atenção para os conceitos• Não é o momento de entender todos os
detalhes do Struts
![Page 38: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/38.jpg)
DAOUsuariopackage com.alomundo;
public class DAOUsuario { public boolean validaUsuario(String nome, String
senha) { if (senha.equals("senha")) { return true; } return false; }}
![Page 39: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/39.jpg)
DAOUsuario• Classe responsável pelo acesso a dados• Nessa nossa implementação não faz quase
nada, apenas valida o usuário com uma senha já definida
• Uma versão completa será discutida posteriormente
![Page 40: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/40.jpg)
LoginAction public ActionForward execute(ActionMapping mapping, ActionForm
form, HttpServletRequest request, HttpServletResponse response) { UsuarioForm f = (UsuarioForm) form; DAOUsuario dao = new DAOUsuario(); if (dao.validaUsuario(f.getNome(), f.getSenha())) { return mapping.findForward("Sucesso"); } else { ActionErrors e = new ActionErrors(); e.add("senha", new ActionMessage("errors.login.senha")); saveErrors(request, e); return new ActionForward(mapping.getInput()); } }
![Page 41: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/41.jpg)
LoginAction• Atualize o método execute• Se não conseguir validar o usuário, preenche a
variável errors com uma mensagem padrão do arquivo MessageResources
• Para voltar à mesma página mostrando a mensagem de erro utilizamos o bloco de código return new ActionForward(mapping.getInput());
![Page 42: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/42.jpg)
UsuarioForm public ActionErrors validate(ActionMapping
mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (nome.equals("")) { errors.add("nome", new
ActionMessage("errors.login.nome")); } return errors; }
![Page 43: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/43.jpg)
UsuarioForm• Adicione esse método• Implementação padrão para validação• Se o usuário não informar o nome
adicionamos uma mensagem de erro do arquivo ResourceMessages
![Page 44: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/44.jpg)
struts-config.xml<action path="/EfetuarLogin" name="usuarioForm"
type="com.alomundo.LoginAction" attribute="usuario" validate="true" input="/TelaDeLogin.jsp"> <forward name="Sucesso" path="/PaginaPrincipal.jsp" /></action>
![Page 45: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/45.jpg)
struts-config.xml• Atualize a ação EfetuarLogin• validate=“true” diz que esse formulário
(UsuarioForm) deve passar pelo método validate() para essa ação
• O input indica a página que será aberta no caso do formulário não ser validado
![Page 46: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/46.jpg)
Versão final• Vamos acrescentar a rotina de logout e uma
mensagem para verificar se o usuário já está autorizado
![Page 47: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/47.jpg)
LoginAction } else { ActionErrors e = new ActionErrors(); e.add("senha", new
ActionMessage("errors.login.senha")); saveErrors(request, e); request.getSession().removeAttribute("usuario"); return new ActionForward(mapping.getInput()); }
![Page 48: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/48.jpg)
LoginAction• Em caso de erro, precisamos remover a
variável usuario da sessão
![Page 49: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/49.jpg)
LogoutActionpackage com.alomundo;
import javax.servlet.http.*;import org.apache.struts.action.*;
public class LogoutAction extends Action { public ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest request, HttpServletResponse
response) { request.getSession().removeAttribute("usuario"); return mapping.findForward("Sucesso"); }}
![Page 50: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/50.jpg)
LogoutAction• Quando o usuário clicar no link Sair do
sistema também removemos o bean da sessão
![Page 51: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/51.jpg)
UsuarioForm if (nome.equals("")) { errors.add("nome", new
ActionMessage("errors.login.nome")); request.getSession().removeAttribute("usuario"); }
![Page 52: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/52.jpg)
UsuarioForm• Mais uma vez, se houver algum erro na
validação, removemos a variável da sessão
![Page 53: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/53.jpg)
struts-config.xml<action path="/EfetuarLogout“
type="com.alomundo.LogoutAction" validate="false"> <forward name="Sucesso" path="/BemVindo.jsp" /></action>
![Page 54: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/54.jpg)
struts-config.xml• Quando o usuário estiver saindo do sistema
não é necessário validar o formulário• O default é true, por isso precisamos mudá-
lo para false
![Page 55: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/55.jpg)
TelaDeLogin.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"%><%@ taglib uri="/tags/struts-html" prefix="html"%><%@ taglib uri="/tags/struts-bean" prefix="bean"%><%@ taglib uri="/tags/struts-logic" prefix="logic"%>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>.: Login :.</title><link rel="stylesheet" href="css/Estilo.css" type="text/css" /></head><body><table width=90% height=90%><tr><td align=center><table width=50% border><tr><td colspan=2><html:errors /><tr><td><table width=100%>
![Page 56: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/56.jpg)
TelaDeLogin.jsp<logic:present name="usuario"><tr><td>Você já está autorizado, <bean:write name="usuario"property="nome" /></td></tr><tr><td><html:link action="/EfetuarLogout">Sair do
Sistema</html:link></td></tr><tr><td><html:link action="/EfetuarLogin">Entrar no
Sistema</html:link></td></tr></logic:present>
![Page 57: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/57.jpg)
TelaDeLogin.jsp<logic:notPresent name="usuario"><html:form action="/EfetuarLogin"><tr><td><bean:message key="login.nome" /></td><td><html:text property="nome" name="usuario" /></td></tr><tr><td><bean:message key="login.senha" /></td><td><html:password property="senha" name="usuario" /></td></tr><tr><td colspan=2 align=center><html:submit value="Entrar" /></td></tr><tr><td colspan=2 align=center><html:imagesrc="imagens/cup.gif" /></td></tr></html:form></logic:notPresent>
![Page 58: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/58.jpg)
TelaDeLogin.jsp</table></td></tr></table></td></tr></table></body></html>
![Page 59: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/59.jpg)
Tags lógicas• logic:present – verifica se o bean usuario
está carregado na sessão• O bloco dentro dessa tag só aparecerá se o
bean for diferente de null• Ou seja, se o usuário já tiver acessado o
sistema, mostramos apenas uma mensagem para ele e dando a opção de ir para a página inicial ou sair
![Page 60: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/60.jpg)
Tags lógicas• logic:notPresent – esse bloco será mostrado
se o bean não estiver carregado• Nesse caso, mostramos a tela de login
![Page 61: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/61.jpg)
Exercício• Vamos criar um cadastro de pessoas• Os atributos do ActionForm são nome,
endereço, telefone e cpf, todos do tipo String• Na página principal, vamos acrescentar um
link para esse cadastro
![Page 62: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/62.jpg)
PessoaFormpackage com.alomundo;
import org.apache.struts.action.*;
public class PessoaForm extends ActionForm { private String nome; private String endereco; private String telefone; private String cpf;
public String getCpf() { return cpf; }
public void setCpf(String cpf) { this.cpf = cpf; }
![Page 63: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/63.jpg)
PessoaForm public String getEndereco() { return endereco; } public void setEndereco(String endereco) { this.endereco = endereco; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; }}
![Page 64: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/64.jpg)
Formulário• Nenhuma novidade nesse formulário, não é?
![Page 65: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/65.jpg)
MessageResources#
pessoa.nome=Nome:
pessoa.endereco=Endereço:
pessoa.telefone=Telefone:
pessoa.cpf=CPF:
![Page 66: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/66.jpg)
Mais mensagens• Vamos acrescentar mais essas mensagens
ao nosso arquivo ResourceMessages
![Page 67: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/67.jpg)
CadastroDePessoa.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"%><%@ taglib uri="/tags/struts-html" prefix="html"%><%@ taglib uri="/tags/struts-bean" prefix="bean"%>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>.: Login :.</title><link rel="stylesheet" href="css/Estilo.css" type="text/css" /></head><body><table width=90% height=90%><tr><td align=center><table width=50% border><tr><td colspan=2><html:errors /><tr><td><table width=100%>
![Page 68: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/68.jpg)
CadastroDePessoa.jsp<html:form action="/CadastrarPessoa"><tr><td><bean:message key="pessoa.nome" /></td><td><html:text property="nome" name="pessoa" /></td></tr><tr><td><bean:message key="pessoa.endereco" /></td><td><html:text property="endereco" name="pessoa" /></td></tr><tr><td><bean:message key="pessoa.telefone" /></td><td><html:text property="telefone" name="pessoa" /></td></tr><tr><td><bean:message key="pessoa.cpf" /></td><td><html:text property="cpf" name="pessoa" /></td>
![Page 69: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/69.jpg)
CadastroDePessoa.jsp</tr><tr><td colspan=2 align=center><html:submit value="Gravar" /></td></tr><tr><td colspan=2 align=center><html:image src="imagens/cup.gif" /></td></tr></html:form></table></td></tr></table></td></tr></table></body></html>
![Page 70: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/70.jpg)
Nova página de cadastro• Nossas páginas são formadas por
mensagens e componentes HTML• Não se esqueça: esses componentes são
ligados (bind) aos atributos do formulário em questão
![Page 71: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/71.jpg)
PaginaPrincipal.jsp<p><html:link href="BemVindo.do">Página Inicial</html:link><p><html:link href="CadastroDePessoa.do">Cadastro de
Pessoa</html:link><p><html:image src="imagens/T4.gif" /></p>
![Page 72: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/72.jpg)
Menu da página principal• Vamos acrescentar a chamada ao nosso
novo cadastro• Quando o usuário clicar no link
CadastroDePessoa o Struts irá direcionar a aplicação para a página CadastroDePessoa.jsp
![Page 73: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/73.jpg)
struts-config.xml<form-beans><form-bean name="usuarioForm"
type="com.alomundo.UsuarioForm" /><form-bean name="pessoaForm" type="com.alomundo.PessoaForm" /></form-beans>
![Page 74: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/74.jpg)
Lista de formulários• Todos os formulários criados devem ser
registrados nessa tag
![Page 75: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/75.jpg)
struts-config.xml<action path="/CadastroDePessoa" forward="/CadastroDePessoa.jsp" /><action path="/CadastrarPessoa" name="pessoaForm" type="com.alomundo.PessoaAction"
attribute="pessoa" scope="request"> <forward name="Sucesso" path="/PaginaPrincipal.jsp" /></action>
![Page 76: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/76.jpg)
Ações do novo cadastro• Os dados da variável usuario ficam
gravados na sessão e podem ser usados a qualquer instante
• Os dados desse formulário não precisam viver mais que o próprio request, não precisa ficar guardado para depois
![Page 77: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/77.jpg)
PessoaActionpackage com.alomundo;
import javax.servlet.http.*;import org.apache.struts.action.*;
public class PessoaAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { PessoaForm f = (PessoaForm) form; System.out.println("Dados recuperados da tela"); System.out.println("Nome: " + f.getNome()); System.out.println("Endereço: " + f.getEndereco()); System.out.println("Telefone: " + f.getTelefone()); System.out.println("CPF:" + f.getCpf()); return mapping.findForward("Sucesso"); }}
![Page 78: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/78.jpg)
PessoaAction• Quando o usuário clicar no botão Gravar o
Struts chama o método execute
![Page 79: Struts Aplicação de exemplo ma@marcoreis.net. Aplicação de exemplo Vamos criar uma aplicação para ver os principais componentes do Struts Não faremos.](https://reader035.fdocuments.net/reader035/viewer/2022062512/552fc0f8497959413d8b5e9b/html5/thumbnails/79.jpg)
Agora é sua vez• Seguindo os exemplos que vimos, crie um
cadastro de notícias• Sua notícia terá titulo, texto e data, todos do
tipo String