jakarta struts marco antonio arquiteto de software tjdf ma@marcoreis net ltima revis o maio 2007 l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Struts PowerPoint Presentation
Download Presentation
Struts

Loading in 2 Seconds...

play fullscreen
1 / 81

Struts - PowerPoint PPT Presentation


  • 144 Views
  • Uploaded on

Jakarta Struts Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Última revisão: Maio/2007. Struts. Struts. Framework para facilitar a implementação da arquitetura MVC em aplicações JSP. Tem se tornado um padrão mundial. Bastante completo.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Struts' - ace


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
jakarta struts marco antonio arquiteto de software tjdf ma@marcoreis net ltima revis o maio 2007
Jakarta Struts

Marco Antonio,

Arquiteto de Software – TJDF

ma@marcoreis.net

Última revisão: Maio/2007

Struts
struts
Struts
  • Framework para facilitar a implementação da arquitetura MVC em aplicações JSP.
  • Tem se tornado um padrão mundial.
  • Bastante completo.
  • Demanda muito tempo para o aprendizado.
servi os oferecidos pelo struts
Serviços oferecidos pelo Struts
  • Um poderoso Servlet de controle que faz a delegação das regras de negócio para uma classe específica. É configurado via XML.
  • Validadores para diversas situações.
  • Gerenciamento de exceção.
  • Utilitários para upload.
  • Utilitários para manipulação de javaBeans.

* vários desses utilitários foram transferidos para projetos separados para reutilização em outros sistemas, mesmo sem o Struts.

download
Download
  • Faça o download do Struts no site jakarta.apache.org/struts/index.html.
  • Descompacte o conteúdo do Struts na sua pasta pessoal.
principais arquivos
Principais arquivos
  • O framework está no arquivo struts.jar, mas, assim como tudo no Java, ele necessita de diversas outras bibliotecas.
  • Esse mecanismo é bastante prático, pois facilita a instalação, portabilidade, atualização, correção, etc.
  • Copie as bibliotecas (.jar) para o SistemaBancario/lib e registre-as (Add to Build Path).
  • Copie as tag libs (.tld) para o SistemaBancarioWeb/WEB-INF.
web xml
web.xml

<?xml version="1.0" ?>

<!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>

<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>

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

web xml7
web.xml

<taglib>

<taglib-uri>/tags/struts-bean</taglib-uri>

<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

</taglib>

<taglib>

<taglib-uri>/tags/struts-logic</taglib-uri>

<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

</taglib>

<taglib>

<taglib-uri>/tags/struts-html</taglib-uri>

<taglib-location>/WEB-INF/struts-html.tld</taglib-location>

</taglib>

</web-app>

web xml8
web.xml
  • Arquivo padrão para configurar qualquer aplicação web.
  • Deve ficar dentro do diretório WEB-INF da aplicação.
  • Esse diretório, a partir de agora, é obrigatório. Dentro dele estarão todas as bibliotecas necessárias ao nosso trabalho.
principais tags do web xml
Principais tags do web.xml
  • Servlet: indica o nome do Servlet do Struts, a classe desse Servlet e o arquivo de configuração do Struts, quem vamos ver na sequência.
  • Load-on-startup: opcional. Faz o ActionServlet ser carregado quando o servidor web é iniciado.
  • Servlet-mapping: indica que o Servlet responde apenas ao padrão *.do.
  • Atenção: se você acessar uma página .html comum do servidor, o ActionServlet não é acessado.
web xml10
web.xml
  • Taglib: biblioteca de tags proprietárias do Struts para fazer tarefas comuns.
  • Exemplos: Ler os valores dos atributos de uma classe (JavaBean), ler o arquivo de mensagens (application.properties), fazer loops, comparações, verificar condições (existe, não existe), mostrar componentes HTML.
  • Existem vários concorrentes, mas todos seguem o mesmo princípio, mudando apenas a sintaxe. Algumas vezes, nem isso.
atualizando o contexto
Atualizando o contexto
  • Quando você cria um projeto no Tomcat através do plugin, é criada uma entrada similar a essa no arquivo c:\Tomcat\conf\server.xml:

<Context path="/sistemabancarioweb" reloadable="true" docBase="E:\sistemas\SistemaBancarioWeb" workDir="E:\sistemas\SistemaBancarioWeb\work" >

<Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>

</Context>

  • Esse arquivo tem a configuração de todas as aplicações (contextos) que existem nessa instalação do Tomcat.
  • Como estamos alterando bastante as configurações do ambiente, se ocorrer algum erro ou comportamento estranho da aplicação é necessário atualizar o contexto. Siga esses passos:
    • Botão direito no projeto (SitemaBancarioWeb) – Tomcat Project – Update Context Definition.
tools jar
tools.jar
  • Em algumas instalações do Java temos problemas com o registro da máquina. Para evitar essa situação, vamos registrar o arquivo tools.jar, que é a biblioteca de utilitários da linguagem.
  • Vá no menu Window – Preferences – Tomcat e veja a configuração final no próximo slide.
principais taglibs
Principais taglibs
  • Bean: gerencia os beans (classes de entidade), acessa propriedades, mensagens, cookies, etc.
  • Logic: faz comparações, avalia condições, faz loops,
  • Html: representa os componentes html, tornando a sua utilização mais simples.
struts config xml
struts-config.xml

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<action-mappings>

<action path="/BemVindo" type="com.sistemabancario.apresentacao.action.BemVindoAction">

<forward name="Sucesso" path="/jsp/BemVindo.jsp" />

</action>

</action-mappings>

<message-resources parameter="resources.application" />

</struts-config>

entenda o struts config xml
Entenda o struts-config.xml
  • Path: indica a URL que deve ser chamada para executar essa ação (BemVindo).
  • Type: Classe que representa a ação desejada.
  • Forward: indica os caminho que podem ser seguidos para essa ação. Em geral, indica sucesso o fracasso para abrir alguma página.
  • Path (forward): página JSP que vai ser mostrada.
  • Message-resources: arquivo que contém as mensagens/rótulos da sua aplicação (internacionalização). Resources indica o diretório, application o arquivo. A extensão .properties fica implícita!
application properties
application.properties

#

cadastro.nome=Nome

cadastro.endereco=Endereço

cadastro.telefone=Telefone

cadastro.id=Código

#

mensagem.editar=Editar

mensagem.excluir=Excluir

#

cadastroDeAgencia.tituloDaPaginaDeConsulta=ConsultaAgências

cadastroDeAgencia.tituloDaPaginaDeCadastro=CadastrodeAgências

#

cadastroDeGerente.tituloDaPaginaDeConsulta=ConsultaGerentes

cadastroDeGerente.tituloDaPaginaDeCadastro=CadastrodeGerente

cadastroDeGerente.listaDeGerentes=ListadeGerentes

#

sistema.tituloDoSistema=SistemaBancário

sistema.mensagemDeBoasVindas=Bem-VindoaoSistemaBancário

application properties18
application.properties
  • Arquivo de configuração de mensagens da aplicação.
  • Crie esse arquivo no SistemaBancario/src/resources.
  • Você pode colocar as mensagem em várias línguas e utilizá-las na sua aplicação.
bemvindoaction java
BemVindoAction.java

package com.sistemabancario.apresentacao.action;

import javax.servlet.http.*;

import org.apache.struts.action.*;

public class BemVindoAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

return mapping.findForward("Sucesso");

}

}

aten o
Atenção
  • Todas as páginas JSP devem estar dentro de um diretório chamado jsp (crie esse diretório), para uma melhor organização de sua aplicação.
bemvindo jsp
BemVindo.jsp

1. <%@ taglib uri="/tags/struts-bean" prefix="bean"%>

2. <linkrel="stylesheet" href="css/Estilo.css" type="text/css">

<table>

<tr>

<td>

3. <jsp:includepage="Cabecalho.jsp"/>

<html>

<head>

4. <title><bean:messagekey="sistema.tituloDoSistema"/></title>

</head>

<body>

5. <h1><bean:messagekey="sistema.mensagemDeBoasVindas"/></title></h1>

</html>

bemvindo jsp22
BemVindo.jsp

1. declara que a página utiliza a taglib bean, nesse caso para ler o arquivo de mensagens.

2. folha de estilos da aplicação.

3. recurso do JSP para incluir nesse ponto, outra página .jsp. Utiliza sempre o padrão taglib:função, nesse caso jsp:include.

4. lê o arquivo de configuração e recupera a mensagem do título do sistema. Também utiliza o padrão taglib:função. A tag utilizada é bean, a função message lê a mensagem associada a uma chave.

5. lê a mensagem de boas-vindas configurada.

cabecalho jsp
Cabecalho.jsp

Opções:

<ahref="ListarGerentes.do">Gerentes</a>

| Agências

| Cliente

| Contas-Corrente

| <ahref="BemVindo.do">Página Inicial</a>

acessando a primeira aplica o struts
Acessando a primeira aplicação Struts
  • Para acessar nossa tela de boas-vindas, utilizamos a URL seguinte:

http://localhost:8080/sistemabancarioweb/BemVindo.do

  • A extensão .do faz parte da especificação do Struts. Esse padrão foi configurado no web.xml (url-pattern). Quando você utilizar esse padrão na URL do browser, irá chamar a aplicação Struts através do ActionServlet.
  • Toda vez que uma solicitação com final .do é acessada pelo browser, o Servlet do Struts entra em ação.
din mica da aplica o
Dinâmica da aplicação
  • Você acessou a action BemVindo (struts-config.xml) através da URL BemVindo.do.
  • O Struts direcionou a chamada para a classe BemVindoAction. Como o objetivo é apenas mostrar a página de boas-vindas, não existe nenhum processamento extra nessa classe.
  • Quando estivermos consultando dados, esse processamento ficará numa classe similar.
  • O método chamado pelo Struts é o execute(). Veja no exemplo a lista de parâmetros.
  • Toda ação deve ficar em uma subclasse de Action. Por exemplo ExibirClienteAction, InserirClienteAction.
mais uma a o
Mais uma ação
  • Vamos acrescentar mais uma tag action na nossa aplicação.
  • Dessa vez, vamos listar todos os gerentes.
struts config xml28
struts-config.xml

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<action-mappings>

<action path="/BemVindo" type="com.sistemabancario.apresentacao.action.BemVindoAction">

<forward name="Sucesso" path="/jsp/BemVindo.jsp" />

</action>

<action path="/ListarGerentes" type="com.sistemabancario.apresentacao.action.ListarGerentesAction">

<forward name="Sucesso" path="/jsp/ListaDosGerentes.jsp" />

</action>

</action-mappings>

<message-resources parameter="resources.application" />

</struts-config>

struts config xml29
struts-config.xml
  • Adicionamos a ação ListarGerentes. Para acessar essa ação acesse a URL:

http://localhost:8080/sistemabancarioweb/ListarGerentes.do

  • Depois de acessar essa URL, o Struts irá direcionar a ação para o execute da classe ListarGerentesAction.
  • A maior parte de sua aplicação (na verdade, de qualquer aplicação) seguirá passos similares.
listargerentesaction java
ListarGerentesAction.java

package com.sistemabancario.apresentacao.action;

import java.util.*;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import com.sistemabancario.persistencia.*;

public class ListarGerentesAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

DAOGerente daoGerente = new DAOGerente();

Collection lista = daoGerente.consultarTodos();

request.setAttribute("gerentes", lista);

return mapping.findForward("Sucesso");

}

}

daogerente mock
DAOGerente – mock

package com.sistemabancario.persistencia;

import java.util.*;

import com.sistemabancario.formularios.*;

public class DAOGerente {

public FormularioGerente consultarPeloId(long id) {

FormularioGerente g = new FormularioGerente();

g.setEndereco("Algum endereço");

g.setId(id);

g.setNome("Algum nome");

g.setTelefone("3214-4323");

return g;

}

public void inserir(FormularioGerente gerente) {

System.out.println("Estou inserindo um novo gerente...");

System.out.println(gerente.getId());

System.out.println(gerente.getNome());

System.out.println(gerente.getEndereco());

System.out.println(gerente.getTelefone());

}

public void atualizar(FormularioGerente gerente) {

System.out.println("Estou atualizando um gerente...");

System.out.println(gerente.getId());

System.out.println(gerente.getNome());

System.out.println(gerente.getEndereco());

System.out.println(gerente.getTelefone());

}

daogerente mock32
DAOGerente – mock

public Collection consultaTodos() {

Collection lista = new ArrayList();

FormularioGerente g = new FormularioGerente();

g.setEndereco("Taguatinga");

g.setNome("Jose");

g.setTelefone("3352-1212");

g.setId(1);

lista.add(g);

g = new FormularioGerente();

g.setEndereco("Asa Sul");

g.setNome("Maria");

g.setTelefone("3423-4512");

g.setId(2);

lista.add(g);

g = new FormularioGerente();

g.setEndereco("Asa Norte");

g.setNome("Joao");

g.setTelefone("3242-4321");

g.setId(3);

lista.add(g);

g = new FormularioGerente();

g.setEndereco("Lago Norte");

g.setNome("Paulo");

g.setTelefone("3248-7654");

g.setId(4);

lista.add(g);

return lista;

}

}

listargerentesaction
ListarGerentesAction
  • Quando você acessou a URL ListarGerentes.do, o Struts chamou o método execute (atenção para a lista de parâmetros!!!).
  • O objetivo é recuperar uma collection (o Struts trabalha com os tipos mais comuns do Java), que é a lista dos gerentes. Para isso utilizamos o DAOGerente.
  • Logo em seguida, guardamos essa lista na sessão do browser. Vamos recuperá-la posteriormente na página JSP.
listadosgerentes jsp
ListaDosGerentes.jsp

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

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

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

<linkrel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title><bean:messagekey="cadastroDeGerente.tituloDaPaginaDeConsulta"/>

</title>

</head>

<body>

<table>

<tr>

<td>

<jsp:includepage="Cabecalho.jsp"/>

</td>

</tr>

</table>

listadosgerentes jsp35
ListaDosGerentes.jsp
  • Declaração das taglibs que vamos usar nessa página.
  • Html para os componentes html.
  • Bean para acessar os javabeans
  • Logic para o loop. Lembre-se: vamos mostar vários registros.
listadosgerentes jsp36
ListaDosGerentes.jsp

<h1><bean:messagekey="cadastroDeGerente.tituloDaPaginaDeConsulta"/></h1>

1. <!-- logic:presentname="gerentes" (isso é opcional)-->

<tableborder="1">

<tr>

<th>

2. <bean:messagekey="cadastro.nome"/>

</th>

<th>

<bean:messagekey="cadastro.endereco" />

</th>

<th>

<bean:messagekey="cadastro.telefone" />

</th>

<th>

<bean:messagekey="mensagem.editar" />

</th>

<th>

<bean:messagekey="mensagem.excluir" />

</th>

</tr>

listadosgerentes jsp37
ListaDosGerentes.jsp

1. utiliza a taglib logic para verificar se o atributo “gerentes” existe mesmo na sessão. Caso exista, ele executa o conteúdo, podendo mostrar uma mensagem caso não encontre o atributo na sessão.

2. lê as mensagens associadas às chaves.

listadosgerentes jsp38
ListaDosGerentes.jsp

1. <logic:iterateid="gerente" name="gerentes">

<tr>

<td>

2. <bean:writename="gerente" property="nome"/>

</td>

<td>

3. <bean:writename="gerente" property="endereco"/>

</td>

<td>

4. <bean:writename="gerente" property="telefone"/>

</td>

<tdalign=center>

5. <html:linkpage="/ExibirGerente.do" paramId="id" paramName="gerente" paramProperty="id">

6. <html:imagesrc="imagens/edit.gif" alt="EditarRegistro" />

</html:link>

</td>

listadosgerentes jsp39
ListaDosGerentes.jsp

1. logic:iterate é uma tag que faz iteração, ou seja, repetição. Name indica o bean que limita essas repetições (gerentes, que é a lista de todos os gerentes, veja a classe ListarGerenteAction). O id representará cada um dos elementos da lista. Cada elemento será referenciado por gerente.

2. bean:write escreve na tela o valor da propriedade nome no primeiro gerente da lista. Name indica o bean gerente dessa iteração. Property indica a propriedade do bean. A propriedade deve existir no bean em questão. Todas as conversões são automáticas, por conta do Struts.

listadosgerentes jsp40
ListaDosGerentes.jsp

3. escreve o valor da propriedade endereco.

4. escreve o valor da propriedade telefone.

5. html:link é uma ligação com a action ExibirGerente. Quando você clicar aqui, vamos criar um parâmetro id com o valor do id do gerente em da iteração atual. Vamos passar esse valor para uma página e mostrar os dados desse gerente, com a finalidade de edição. Veja a imagem.

6. html:image mostra uma imagem, para fins estéticos, apenas isso.

din mica da consulta
Dinâmica da consulta
  • Quando acessarmos a action ExibirGerente, passaremos o id que vamos consultar.
  • Quando o id tiver algum valor válido, vamos carregar a tela com os dados do gerente.
  • Se você não passar nenhum id, o sistema irá inserir o gerente. Na outra situação, vamos atualizar um já existente.
listadosgerentes jsp43
ListaDosGerentes.jsp

<tdalign=center>

1. <html:linkpage="/ExcluirGerente.do" paramId="id" paramName="gerente" paramProperty="id">

2. <html:imagesrc="imagens/delete_2x.gif" alt="ExcluirRegistro" />

</html:link>

</td>

</tr>

3. </logic:iterate>

<tr>

<tdcolspan="5">

4. <html:linkpage="/ExibirGerente.do">

5. <html:imgsrc="imagens/add.gif" alt="AdicionarRegistro" border="0" align="right" />

</html:link>

</table>

6. <!-- /logic:present (isso é opcional) -->

</body>

</html>

listadosgerentes jsp44
ListaDosGerentes.jsp

1. a exclusão funciona da mesma forma que a edição. Vamos passar um id, e a página seguinte irá excluir o gerente associado.

2. uma imagem, também para fins estéticos.

3. fim da iteração. Tudo que está entre o início e o fim da tag logic:iterate será repetido enquando existirem mais gerentes na lista.

4. abre a página de cadastro, exibindo uma página em branco, pois não foi informado nenhum id.

5. mais uma vez nossa imagem.

6. fim da tag logic:present, que verifica se realmene existe o atributos gerentes na sessão. Tem como finalidade garantir que você passou a lista dos gerentes.

struts config xml45
struts-config.xml

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<form-beans>

<form-bean name="formularioGerente" type="com.sistemabancario.apresentacao.formulario.FormularioGerente">

</form-bean>

</form-beans>

<action-mappings>

<action path="/BemVindo" type="com.sistemabancario.apresentacao.action.BemVindoAction">

<forward name="Sucesso" path="/jsp/BemVindo.jsp" />

</action>

<action path="/ListarGerentes"

type="com.sistemabancario.apresentacao.action.ListarGerentesAction">

<forward name="Sucesso" path="/jsp/ListaDosGerentes.jsp" />

</action>

<action path="/ExibirGerente" type="com.sistemabancario.apresentacao.action.ExibirGerenteAction">

<forward name="ExibirGerente" path="/jsp/CadastroDeGerente.jsp" />

</action>

struts config xml46
struts-config.xml

<action path="/CadastrarGerente" type="com.sistemabancario.apresentacao.action.CadastrarGerenteAction"

name="formularioGerente">

<forward name="ListarGerentes" path="/ListarGerentes.do" />

</action>

</action-mappings>

<message-resources parameter="resources.application" />

</struts-config>

novidades no struts config xml
Novidades no struts-config.xml
  • Até agora vimos apenas ações de consulta (BemVindo e ListarGerentes).
  • A outra situação é o cadastro. Toda vez que precisamos de uma página para cadastro, vamos criar um formulário (form-bean) e sua respectiva classe (ActionForm).
formulariogerente java
FormularioGerente.java

package com.sistemabancario.apresentacao.formulario;

import org.apache.struts.action.*;

public class FormularioGerente extends ActionForm {

private long id;

private String nome;

private String endereco;

private String telefone;

public String getEndereco() {

return endereco;

}

public void setEndereco(String endereco) {

this.endereco = endereco;

}

public long getId() {

return id;

}

public void setId(long id) {

this.id = id;

}

public String getNome() {

return nome;

}

formulariogerente java49
FormularioGerente.java

public void setNome(String nome) {

this.nome = nome;

}

public String getTelefone() {

return telefone;

}

public void setTelefone(String telefone) {

this.telefone = telefone;

}

}

formulariogerente java50
FormularioGerente.java
  • Essa classe deve ter atributos correspondentes a todos os campos da tela.
  • A primeira impressão que temos é que duplicamos código, pois temos uma classe de entidade bastante parecida.
  • Precisamos lembrar que esse é um exemplo básico e existem estratégias específicas para eliminar esse tipo de problema.
exibirgerenteaction java
ExibirGerenteAction.java

package com.sistemabancario.apresentacao.action;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import com.sistemabancario.entidades.*;

import com.sistemabancario.persistencia.*;

public class ExibirGerenteAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

Gerente gerente = new Gerente();

String id = request.getParameter("id");

if (id != null) {

DAOGerente daoGerente = new DAOGerente();

Long idGerente = new Long(id);

gerente = daoGerente.consultarPeloId(idGerente);

}

request.setAttribute("gerente", gerente);

return mapping.findForward("ExibirGerente");

}

}

exibirgerenteaction java52
ExibirGerenteAction.java
  • Nessa classe recuperamos o valor do parâmetro id, caso ele exista.
  • Quando esse valor é diferente de nulo (o parâmetro foi informado) vamos no DAOGerente e recuperamos o objeto correspondente.
  • Logo em seguida, colocamos o gerente na sessão, para ser recuperado na página seguinte.
  • Se o parâmetro id não for informado, o gerente da sessão não terá valores para seus atributos, por isso os campos da tela seguinte estarão em branco.
cadastrodegerente jsp
CadastroDeGerente.jsp

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

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

<linkrel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title><bean:messagekey="cadastroDeGerente.tituloDaPaginaDeCadastro"/></title>

</head>

<body>

<h1><bean:messagekey="cadastroDeGerente.tituloDaPaginaDeCadastro"/></title></h1>

<tableborder=1>

1. <html:formaction="CadastrarGerente">

2. <html:hiddenproperty="id" name="gerente"/>

<tr>

<td>

<bean:messagekey="cadastro.nome" />

</td>

<td>

3. <html:textproperty="nome" name="gerente" maxlength="30" size="30" />

</td>

</tr>

cadastrodegerente jsp54
CadastroDeGerente.jsp

<td>

<bean:messagekey="cadastro.endereco" />

</td>

<td>

4. <html:textproperty="endereco" name="gerente" size="30" />

</td>

<tr>

<td>

<bean:messagekey="cadastro.telefone" />

</td>

<td>

5. <html:textproperty="telefone" name="gerente" size="20" />

</td>

</tr>

<tr>

<td>

cadastrodegerente jsp55
CadastroDeGerente.jsp

6. <html:buttononclick="submit()" property="btnGravar" value="Gravar" />

</td>

<td>

7. <html:buttononclick="action='ListarGerentes.do';submit()" property="btnVoltar" value="Voltar" />

</td>

</tr>

</html:form>

</table>

</body>

</html>

cadastrodegerente jsp56
CadastroDeGerente.jsp

1. form:action é a tag que indica qual a ação do botão de submit, nesse caso Gravar.

2. no html:hidden iremos armazenar o atributo id do gerente. Name indica o bean que deve ter sido carregado na classe ExibirGerenteAction. No caso da inclusão, esse valor será “0” (zero).

3, 4, 5. html:text é uma caixa de texto que contém o valor do atributo nome, endereco, telefone, do bean gerente.

6. botão de submit, ou seja, submeter todas essas informações para a action CadastrarGerente. Property indica o nome do botão.

7. botão de voltar com javascript para redirecionar nossa página para a action ListarGerentes, sem gravar nenhuma informação dessa tela.

tela de cadastro
Tela de cadastro
  • Veja o atributo id na URL do browser, com o valor 7.
  • Se você suprimir essa informação, a tela será carregada com os campos em branco.
cadastrargerenteaction java
CadastrarGerenteAction.java

package com.sistemabancario.apresentacao.action;

import javax.servlet.http.*;

import org.apache.commons.beanutils.*;

import org.apache.struts.action.*;

import com.sistemabancario.apresentacao.formulario.*;

import com.sistemabancario.entidades.*;

import com.sistemabancario.persistencia.*;

public class CadastrarGerenteAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

String id = request.getParameter("id");

1. FormularioGerente formularioGerente = (FormularioGerente) form;

DAOGerente daoGerente = new DAOGerente();

Gerente gerente = new Gerente();

BeanUtils.copyProperties(gerente, formularioGerente);

2. if(id == null || id.equals("") || id.equals(“0”)) {

daoGerente.inserir(gerente);

} else {

daoGerente.atualizar(gerente);

}

return mapping.findForward(“Sucesso”);

}

}

cadastrargerenteaction java59
CadastrarGerenteAction.java
  • Esse é um mecanismo automático do Struts. Estamos recuperando o formulário da página anterior, que era o cadastro de gerentes. Os atributos desse formulário têm os mesmos valores digitados pelo usuário na tela de cadastro.
  • Verifica se o id foi informado. As condições estão aí apenas para ilustrar quais as possibilidades de valor que teremos, dependendo da lógica que você utilize na sua aplicação.
  • BeanUtils é uma classe utilitária do Jakarta que copia os valores dos atributos iguais entre os objetos informados. Nesse caso, vamos copiar todos os atributos iguais para do objeto formularioGerente para o gerente
  • Nosso DAOGerente grava apenas objetos do tipo Gerente, mas o Struts trabalha apenas com o FormularioGerente, por isso a cópia é obrigatória
  • Obs: os itens 3 e 4 não se aplicam a essa versão
struts config xml60
struts-config.xml

<action path="/ExcluirGerente"

type="com.sistemabancario.apresentacao.action.ExcluirGerenteAction">

<forward name="ListarGerentes" path="/ListarGerentes.do" />

</action>

struts config xml61
struts-config.xml
  • Última action da configuração do Struts.
  • Acrescente essas tags ao arquivo de configuração já existente.
excluirgerenteaction java
ExcluirGerenteAction.java

package com.sistemabancario.apresentacao.action;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import com.sistemabancario.persistencia.*;

public class ExcluirGerenteAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

String id = request.getParameter("id");

DAOGerente daoGerente = new DAOGerente();

Long idGerente = new Long(id);

daoGerente.excluir(idGerente);

return mapping.findForward("ListarGerentes");

}

}

excluirgerenteaction java63
ExcluirGerenteAction.java
  • O id, informado na tela de consulta, é utilizado como parâmetro para a exclusão no DAOGerente
  • Em seguida, voltamos à página de consulta, vendo uma lista atualizada com os gerentes restantes
struts config xml65
struts-config.xml

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<form-beans>

<form-bean name="formularioGerente"

type="com.sistemabancario.apresentacao.formulario.FormularioGerente">

</form-bean>

<form-bean name="formularioAgencia"

type="com.sistemabancario.apresentacao.formulario.FormularioAgencia">

</form-bean>

</form-beans>

<action-mappings>

<action path="/BemVindo"

type="com.sistemabancario.apresentacao.action.BemVindoAction">

<forward name="Sucesso" path="/jsp/BemVindo.jsp" />

</action>

<action path="/ListarGerentes"

type="com.sistemabancario.apresentacao.action.ListarGerentesAction">

<forward name="Sucesso" path="/jsp/ListaDosGerentes.jsp" />

</action>

struts config xml66
struts-config.xml

<action path="/ExibirGerente"

type="com.sistemabancario.apresentacao.action.ExibirGerenteAction">

<forward name="ExibirGerente" path="/jsp/CadastroDeGerente.jsp" />

</action>

<action path="/CadastrarGerente"

type="com.sistemabancario.apresentacao.action.CadastrarGerenteAction"

name="formularioGerente">

<forward name="ListarGerentes" path="/ListarGerentes.do" />

</action>

<action path="/ExcluirGerente"

type="com.sistemabancario.apresentacao.action.ExcluirGerenteAction">

<forward name="ListarGerentes" path="/ListarGerentes.do" />

</action>

<action path="/ExibirAgencia"

type="com.sistemabancario.apresentacao.action.ExibirAgenciaAction">

<forward name="SucessoNaExibicao" path="/jsp/CadastroDeAgencia.jsp" />

</action>

struts config xml67
struts-config.xml

<action path="/CadastrarAgencia"

type="com.sistemabancario.apresentacao.action.CadastrarAgenciaAction"

name="formularioAgencia">

<forward name="ListarAgencias" path="/ListarAgencias.do" />

</action>

<action path="/ListarAgencias"

type="com.sistemabancario.apresentacao.action.ListarAgenciasAction">

<forward name="Sucesso" path="/jsp/ListaDasAgencias.jsp" />

</action>

</action-mappings>

<message-resources parameter="resources.application" />

</struts-config>

listadasagencias jsp
ListaDasAgencias.jsp

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

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

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

<linkrel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title><bean:messagekey="cadastroDeAgencia.tituloDaPaginaDeConsulta"/>

</title>

</head>

<body>

<table>

<tr>

<td>

<jsp:includepage="Cabecalho.jsp"/>

</td>

</tr>

</table>

<h1><bean:messagekey="cadastroDeAgencia.tituloDaPaginaDeConsulta"/></h1>

<logic:presentname="agencias">

<tableborder="1">

<tr>

listadasagencias jsp69
ListaDasAgencias.jsp

<th>

<bean:messagekey="cadastro.nome"/>

</th>

<th>

<bean:messagekey="cadastro.endereco" />

</th>

<th>

<bean:messagekey="cadastro.telefone" />

</th>

<th>

<bean:messagekey="cadastro.nome" /> do Gerente

</th>

<th>

<bean:messagekey="mensagem.editar" />

</th>

<th>

<bean:messagekey="mensagem.excluir" />

</th>

</tr>

<logic:iterateid="agencia" name="agencias">

<tr>

listadasagencias jsp70
ListaDasAgencias.jsp

<td>

<bean:writename="agencia" property="nome"/>

</td>

<td>

<bean:writename="agencia" property="endereco"/>

</td>

<td>

<bean:writename="agencia" property="telefone"/>

</td>

<td>

<bean:writename="agencia" property="gerente.nome" />

</td>

<tdalign=center>

<html:linkpage="/ExibirAgencia.do" paramId="id" paramName="agencia" paramProperty="id">

<html:imagesrc="imagens/edit.gif" alt="EditarRegistro" />

</html:link>

</td>

<tdalign=center>

<html:linkpage="/ExcluirAgencia.do" paramId="id" paramName="agencia" paramProperty="id">

<html:imagesrc="imagens/delete_2x.gif" alt="ExcluirRegistro" />

</html:link>

</td>

</tr>

</logic:iterate>

listadasagencias jsp71
ListaDasAgencias.jsp

<tr>

<tdcolspan="6">

<html:linkpage="/ExibirAgencia.do">

<html:imgsrc="imagens/add.gif" alt="AdicionarRegistro" border="0" align="right" />

</html:link>

</table>

</logic:present>

</body>

</html>

cadastrodeagencia jsp
CadastroDeAgencia.jsp

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

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

<linkrel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title><bean:messagekey="cadastroDeAgencia.tituloDaPaginaDeCadastro"/></title>

</head>

<body>

<h1><bean:messagekey="cadastroDeAgencia.tituloDaPaginaDeCadastro"/></title></h1>

<tableborder=1>

<html:formaction="CadastrarAgencia">

<html:hiddenproperty="id" name="agencia"/>

<tr>

<td>

<bean:messagekey="cadastro.nome" />

</td>

<td>

<html:textproperty="nome" name="agencia" maxlength="30" size="30" />

</td>

</tr>

<td>

<bean:messagekey="cadastro.endereco" />

</td>

cadastrodeagencia jsp73
CadastroDeAgencia.jsp

<td>

<html:textproperty="endereco" name="agencia" size="30" />

</td>

<tr>

<td>

<bean:messagekey="cadastro.telefone" />

</td>

<td>

<html:textproperty="telefone" name="agencia" size="20" />

</td>

</tr>

<tr>

<td>

<bean:messagekey="cadastroDeGerente.listaDeGerentes" />

</td>

<td>

<html:selectproperty="gerente.id" name="agencia">

<html:optionsCollectionname="gerentes" label="nome" value="id" />

</html:select>

</td>

</tr>

<tr>

<td>

cadastrodeagencia jsp74
CadastroDeAgencia.jsp

<html:buttononclick="submit()" property="btnGravar" value="Gravar" />

</td>

<td>

<html:buttononclick="action='ListarAgencias.do';submit()" property="btnVoltar" value="Voltar" />

</td>

</tr>

</html:form>

</table>

</body>

</html>

formularioagencia java
FormularioAgencia.java

package com.sistemabancario.apresentacao.formulario;

import org.apache.struts.action.*;

public class FormularioAgencia extends ActionForm {

private String id;

private String nome;

private String endereco;

private String telefone;

public String getEndereco() {

return endereco;

}

public void setEndereco(String endereco) {

this.endereco = endereco;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getNome() {

return nome;

}

public void setNome(String nome) {

this.nome = nome;

}

formularioagencia java76
FormularioAgencia.java

public String getTelefone() {

return telefone;

}

public void setTelefone(String telefone) {

this.telefone = telefone;

}

}

cadastraragenciaaction java
CadastrarAgenciaAction.java

package com.sistemabancario.apresentacao.action;

import javax.servlet.http.*;

import org.apache.commons.beanutils.*;

import org.apache.struts.action.*;

import com.sistemabancario.apresentacao.formulario.*;

import com.sistemabancario.entidades.*;

import com.sistemabancario.persistencia.*;

public class CadastrarAgenciaAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

String id = request.getParameter("id");

String idG = request.getParameter("gerente.id");

FormularioAgencia formularioAgencia = (FormularioAgencia) form;

DAOAgencia daoAgencia = new DAOAgencia();

Agencia agencia = new Agencia();

Long idGerente = new Long(idG);

Gerente gerente = new DAOGerente().consultarPeloId(idGerente);

cadastraragenciaaction java78
CadastrarAgenciaAction.java

if (id == null || id.equals("") || id.equals("0")) {

BeanUtils.copyProperties(agencia, formularioAgencia);

agencia.setGerente(gerente);

daoAgencia.inserir(agencia);

} else {

Long idAgencia = new Long(id);

agencia = daoAgencia.consultarPeloId(idAgencia);

BeanUtils.copyProperties(agencia, formularioAgencia);

agencia.setGerente(gerente);

daoAgencia.atualizar(agencia);

}

return mapping.findForward("ListarAgencias");

}

}

exibiragenciaaction java
ExibirAgenciaAction.java

package com.sistemabancario.apresentacao.action;

import java.util.*;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import com.sistemabancario.entidades.*;

import com.sistemabancario.persistencia.*;

public class ExibirAgenciaAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

Agencia agencia = new Agencia();

String id = request.getParameter("id");

if (id != null) {

DAOAgencia daoAgencia = new DAOAgencia();

Long idAgencia = new Long(id);

agencia = daoAgencia.consultarPeloId(idAgencia);

} else {

agencia.setGerente(new Gerente());

}

exibiragenciaaction java80
ExibirAgenciaAction.java

DAOGerente daoGerente = new DAOGerente();

Collection lista = daoGerente.consultarTodos();

request.setAttribute("agencia", agencia);

request.setAttribute("gerentes", lista);

return mapping.findForward("SucessoNaExibicao");

}

}

listaragenciasaction java
ListarAgenciasAction.java

package com.sistemabancario.apresentacao.action;

import java.util.*;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import com.sistemabancario.persistencia.*;

public class ListarAgenciasAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

DAOAgencia daoAgencia = new DAOAgencia();

Collection lista = daoAgencia.consultarTodos();

request.setAttribute("agencias", lista);

return mapping.findForward("Sucesso");

}

}