Java para Web
231 pág.

Java para Web


DisciplinaOrientação A Objetos184 materiais1.094 seguidores
Pré-visualização45 páginas
%>
<html>
<!-- for -->
<c:forEach var=&quot;contato&quot; items=&quot;${contatos}&quot;>
${contato.id} - ${contato.nome} <br/>
</c:forEach>
</html>
4) Reinicie o Tomcat.
Capítulo 14 - Struts Framework - ListaContatos no struts-config.xml - Página 128
Material do Treinamento Java para Desenvolvimento Web
5) Teste a URL http://localhost:8080/struts/listaContatos.do
6) O que acontece se acessarmos diretamente o JSP? O que estamos fazendo de errado? Teste a URL
http://localhost:8080/struts/lista.jsp
Neste momento, seu arquivo struts-config.xml possui duas actions:
<struts-config>
<action-mappings>
<action path=&quot;/teste&quot; type=&quot;br.com.caelum.struts.action.TesteSimplesAction&quot;>
<forward name=&quot;ok&quot; path=&quot;/exemplo.jsp&quot;/>
</action>
<action path=&quot;/listaContatos&quot;
type=&quot;br.com.caelum.struts.action.ListaContatosAction&quot;>
<forward name=&quot;lista&quot; path=&quot;/lista.jsp&quot;/>
</action>
</action-mappings>
</struts-config>
O seguinte diagrama descreve o que acontece com o nosso sistema ao requisitar a listagem de contatos:
Capítulo 14 - Struts Framework - Exercício: ListaContatosAction - Página 129
Material do Treinamento Java para Desenvolvimento Web
14.13 - Resultado condicional com o Struts
Como fazer para mostrar a mensagem \u201cNenhum contato fora encontrado&quot;?
A primeira idéia é a de colocar um if dentro do seu JSP e resolver o problema, certo? Mas isso só trará
problemas para o designer, que não sabe tanto de lógica quanto você e pode ser que o editor que ele usa não
suporte tais tipos de lógicas...
Então, a melhor saída é verificar, ainda dentro de sua ação, se o banco de dados retornou uma coleção de
tamanho zero. E, nesse caso, redirecionar para outra página.
14.14 - Exercícios: listagem vazia
1) Crie um JSP novo chamado lista-vazia.jsp na pasta WebContent.
<html>
Você não possui nenhum contato.
</html>
2) Alterando somente sua lógica e adicionando um novo forward, quando a lista estiver vazia, a página
lista-vazia.jsp seja mostrada:
// pesquisa no banco de dados a lista completa
List<Contato> lista = new ContatoDAO().getLista();
request.setAttribute(&quot;contatos&quot;, lista);
// ok.... para onde ir agora?
if(lista.isEmpty()) {
Capítulo 14 - Struts Framework - Resultado condicional com o Struts - Página 130
Material do Treinamento Java para Desenvolvimento Web
return mapping.findForward(&quot;vazia&quot;);
} else {
return mapping.findForward(&quot;lista&quot;);
}
3) Altere seu struts-config.xml para adicionar um novo forward para a lista-vazia:
<action path=&quot;/listaContatos&quot; type=&quot;br.com.caelum.struts.action.ListaContatosAction&quot;>
<forward name=&quot;lista&quot; path=&quot;/lista.jsp&quot;/>
<!-- adicionar a linha a seguir -->
<forward name=&quot;vazia&quot; path=&quot;/lista-vazia.jsp&quot;/>
</action>
4) Teste a sua listagem com o banco de dados vazio. Para simular a lista vazia, você pode, por exemplo, chamar
o método lista.clear() ou remover todos os seus contatos do banco.
14.15 - Resultado do struts-config.xml
Neste momento, seu arquivo struts-config.xml possui duas actions:
<struts-config>
<action-mappings>
<action path=&quot;/teste&quot; type=&quot;br.com.caelum.struts.action.TesteSimplesAction&quot;>
<forward name=&quot;ok&quot; path=&quot;/exemplo.jsp&quot;/>
</action>
<action path=&quot;/listaContatos&quot;
type=&quot;br.com.caelum.struts.action.ListaContatosAction&quot;>
<forward name=&quot;lista&quot; path=&quot;/lista.jsp&quot;/>
<forward name=&quot;vazia&quot; path=&quot;/lista-vazia.jsp&quot;/>
</action>
</action-mappings>
</struts-config>
14.16 - Novos contatos
Agora, já estamos prontos para criar a lógica de negócios e a camada de visualização para permitir adicionar
novos clientes e, consequentemente, listá-los.
Como de costume, seguiremos os passos:
1) Criar a lógica de negócios;
Capítulo 14 - Struts Framework - Resultado do struts-config.xml - Página 131
Material do Treinamento Java para Desenvolvimento Web
2) Criar o JSP de visualização;
3) Criar o mapeamento da lógica para a visualização;
E depois os passos opcionais:
4) Criar a validação do formulário na lógica de negócios
5) Criar o controle de erro na visualização
14.17 - Formulário
Nunca é elegante trabalhar com o método getParameter do request, já que é muito melhor trabalhar com
classes que nós mesmos escrevemos. Assim, vamos imaginar um cenário simples: desejamos adicionar o
nome, email e descrição do cliente.
O Struts possui uma classe chamada ActionForm que ao ser estendida permite ler os parâmetros do request
sem nos preocuparmos com o mesmo!
Sendo assim, no Struts, para cada formulário HTML que existe no nosso site, criamos uma classe em Java
para representar os campos do mesmo.
No nosso caso, precisamos dos campos nome, email e endereco, mas opa, isso é um Contato! Resultado:
package br.com.caelum.struts.form;
import org.apache.struts.action.*;
public class ContatoForm extends ActionForm {
private Contato contato = new Contato();
public Contato getContato() {
return this.contato;
}
}
Atenção: o formulário HTML deverá ter os campos com o mesmo nome que as variáveis membro do seu
formulário!
Existe uma opção avançada de fazer o formulário através de xml, não deixa de ser bastante código e ainda
com a desvantagem de não mostrar erros de compilação.
14.18 - Mapeando o formulário no arquivo struts-config.xml
Assim como a action, devemos configurar nosso form no arquivo struts-config.xml. Para isso, usamos a
tag chamada form-bean.
Atributos de uma tag form-bean:
name: um nome qualquer que queremos dar a um formulário; type: a classe que representa esse
formulário.
Atenção: tal tag vem antes das definições dos action-mappings! Todos os formulários devem ser definidos
dentro de uma única tag form-beans.
Capítulo 14 - Struts Framework - Formulário - Página 132
Material do Treinamento Java para Desenvolvimento Web
<form-beans>
<form-bean name=&quot;ContatoForm&quot; type=&quot;br.com.caelum.struts.form.ContatoForm&quot;/>
</form-beans>
14.19 - Exercício: ContatoForm
1) O primeiro passo é criar o formulário como classe:
a) Crie a classe ContatoForm no pacote br.com.caelum.struts.form.
b) Faça com que seu formulário estenda a classe ActionForm do Struts.
public class ContatoForm extends ActionForm{
}
c) Coloque uma variável do tipo Contato no formulário, chame-a de contato e instancie um Contato:
public class ContatoForm extends ActionForm{
private Contato contato = new Contato();
}
d) Vá no menu Source, Generate Getters and Setters e escolha o método getContato. (ou digite Ctrl+3 e
escreva ggas).
public class ContatoForm extends ActionForm{
private Contato contato = new Contato();
public Contato getContato() {
return contato;
}
}
2) Agora, vamos mapear esse formulário no struts-config.xml. Lembre-se que a tag form-beans deve vir
antes da tag action-mappings.
<form-beans>
<form-bean name=&quot;ContatoForm&quot; type=&quot;br.com.caelum.struts.form.ContatoForm&quot;/>
</form-beans>
14.20 - Erro comum
O erro mais comum com o struts está no arquivo struts-config.xml. Ao configurar seu primeiro form-bean,
o aluno deve prestar muita atenção que a tag form-beans deve vir antes da tag action-mappings.
14.21 - Lógica de Negócios
Podemos escrever um código bem simples que adiciona um novo contato (recebido através de um formulá-
rio) para o banco de dados:
Capítulo 14 - Struts Framework - Exercício: ContatoForm - Página 133
Material do Treinamento Java para Desenvolvimento Web
Criamos um contato, recuperamos os valores do formulário e adicionamos este cliente ao banco de dados:
package br.com.caelum.struts.action;
// série de imports aqui
public class AdicionaContatoAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// log
System.out.println(&quot;Tentando criar um novo contato...&quot;);
// formulário de cliente
ContatoForm formulario = (ContatoForm) form;
// acessa o bean