Java para Web
231 pág.

Java para Web


DisciplinaOrientação A Objetos184 materiais1.094 seguidores
Pré-visualização45 páginas
desse arquivo? Uma vez que o nome do componente é produto, o nome da lógica é
adiciona e o resultado é ok, o nome de seu arquivo de saída deve ser: WebContent/produto/adiciona.ok.jsp.
Você pode alterar o resultado de sua lógica devolvendo uma String qualquer e pode ainda alterar comple-
tamente o resultado de sua lógica utilizando um arquivo de configuração.
Quanto mais você segue o padrão, menos configuração você possui e mais simples fica para outra pessoa
entender o que acontece.
Um exemplo de possível saída diferente seria:
Capítulo 17 - VRaptor - E o JSP com o formulário? - Página 186
Material do Treinamento Java para Desenvolvimento Web
// a ação adiciona
public String adiciona(Produto produto) {
new ProdutoDao().adiciona(produto);
return "valido";
}
E a criação do arquivo produto/adiciona.valido.jsp. Uma mesma lógica pode retornar uma entre diversas
strings diferentes dependendo do que acontece, e então o usuário será redirecionado para o JSP correspon-
dente.
Como configurar esse redirecionamento?
Não precisa!
17.11 - Exercícios
1) Crie um sistema de inclusão de produtos
a) Crie a classe ProdutoLogic no pacote br.com.caelum.vraptor.logic
@Component("produto")
public class ProdutoLogic {
// a ação adiciona
public void adiciona(Produto produto) {
new ProdutoDao().adiciona(produto);
}
// a ação atualiza
public void atualiza(Produto produto) {
new ProdutoDao().atualiza(produto);
}
}
b) Crie o arquivo WebContent/formulario.jsp
<html>
<form action=&quot;produto.adiciona.logic&quot;>
Nome: <input name=&quot;produto.nome&quot;/><br/>
Descricao: <input name=&quot;produto.descricao&quot;/><br/>
Preço: <input name=&quot;produto.preco&quot;/><br/>
<input type=&quot;submit&quot;/>
</form>
</html>
c) Crie o diretório WebContent/produto
d) Crie o arquivo adiciona.ok.jsp no diretório WebContent/produto
<html>
Capítulo 17 - VRaptor - Exercícios - Página 187
Material do Treinamento Java para Desenvolvimento Web
Seu produto foi adicionado com sucesso!<br/>
</html>
e) Você importou alguma classe do pacote javax.servlet?
f) Teste o seu formulário: http://localhost:8080/vraptor/formulario.jsp. Adicione cinco produtos diferentes.
17.12 - A lista de produtos
O segundo passo será criar a listagem de todos os produtos do sistema. Nossa lógica de negócios, mais
uma vez, possui somente aquilo que precisa:
@Component(&quot;produto&quot;)
public class ListaProdutoLogic {
private List<Produto> produtos;
public void lista() {
this.produtos = new ProdutoDao().lista();
}
}
Mas dessa vez precisamos disponibilizar o conteúdo da variável produtos para a nossa camada de visuali-
zação. A maneira mais simples encontrada até hoje de encapsular uma variável é colocá-la como private, como
fizemos, e para disponibilizá-la, geramos o seu getter:
public List<Produto> getProdutos() {
return produtos;
}
Repare que nossa classe pode ser testada facilmente, basta instanciar o bean ListaProdutoLogic, chamar
o método lista e depois o método getProdutos. Todas essas convenções evitando o uso de configurações
ajudam bastante no momento de criar testes unitários para o seu sistema.
Por fim, vamos criar o arquivo lista.ok.jsp no diretório WebContent/produto utilizando a taglib core da
JSTL:
<%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/core&quot; prefix=&quot;c&quot; %>
<html>
<h1>Produtos</h1>
<c:forEach var=&quot;produto&quot; items=&quot;${produtos}&quot;>
Produto ${produto.nome}: ${produto.preco}<br/>
${produto.descricao}<br/><br/>
</c:forEach>
</html>
Capítulo 17 - VRaptor - A lista de produtos - Página 188
Material do Treinamento Java para Desenvolvimento Web
17.13 - Exercícios opcionais
1) Crie um sistema de listagem de produtos
a) Crie a classe ListaProdutoLogic no pacote br.com.caelum.vraptor.logic
@Component(&quot;produto&quot;)
public class ListaProdutoLogic {
private List<Produto> produtos;
public void lista() {
this.produtos = new ProdutoDao().lista();
}
public List<Produto> getProdutos() {
return produtos;
}
}
b) Crie o arquivo lista.ok.jsp no diretório WebContent/produto
<%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/core&quot; prefix=&quot;c&quot; %>
<h1>Produtos</h1>
<c:forEach var=&quot;produto&quot; items=&quot;${produtos}&quot;>
Produto ${produto.nome}: ${produto.preco}<br/>
${produto.descricao}<br/><br/>
</c:forEach>
c) Teste a sua lógica: http://localhost:8080/vraptor/produto.lista.logic.
17.14 - Velocity, Freemaker e Sitemesh
O Vraptor funciona sem problemas com outras camadas de visualização como Velocity e Freemarker, além
de ser facilmente acoplado a controles de visualização como o Sitemesh.
Capítulo 17 - VRaptor - Exercícios opcionais - Página 189
Material do Treinamento Java para Desenvolvimento Web
17.15 - Configurações
Todos os padrões mostrados aqui podem ser configurados através de anotações, XML ou alguns arquivos
do tipo properties. Para mais informações, consulte a documentação do projeto.
17.16 - Um pouco mais...
Através de interceptadores é possível controlar o acesso a um sistema para implementar seu componente
de login ou fornecer objetos do tipo DAO para toda a sua aplicação.
17.17 - Plugin para o Eclipse
Existem plugin abertos e pagos para o Eclipse se conectar ao VRaptor, que vão desde a visualização
de todos os seus componentes passando pela geração automática de listas, páginas do tipo master-detail,
sistemas de controle de envio de email através de filas de espera e até mesmo a geração de um projeto através
de wizards no Eclipse.
17.18 - Pequenos exemplos de simplicidade
Com o intuito de mostrar o que os controladores tentam fazer hoje em dia, dê uma olhada no código a
seguir, que pode ser utilizado com o VRaptor. Repare na injeção de depêndencias através do construtor e dos
parâmetros. Outro ponto importante é a anotação @Role que verifica se o usuário possui ou não tal perfil.
@Component
public class ContatoLogic {
private EmailQueue fila;
public ContatoLogic(EmailQueue fila) throws SQLException {
this.fila = fila;
}
@Role(&quot;gerente&quot;)
public void adiciona(Contato contato) throws SQLException {
new ContatoDAO().adiciona(contato);
fila.envia(new Email(&quot;de&quot;, &quot;para&quot;, &quot;conteudo&quot;));
}
@Role(&quot;admin&quot;)
public void atualiza(Contato contato) throws SQLException {
new ContatoDAO().altera(contato);
}
}
E uma classe de teste unitário, bem natural utilziando JUnit, só código Java, sem configuração extra:
public class ContatoLogicTest class TestCase {
public void testAdicionaNovoContato() throws SQLException {
Contato c = new Contato();
c.setNome(&quot;Meu nome&quot;);
Capítulo 17 - VRaptor - Configurações - Página 190
Material do Treinamento Java para Desenvolvimento Web
new ContatoLogic(new EmailQueue()).adiciona(c);
}
}
Capítulo 17 - VRaptor - Pequenos exemplos de simplicidade - Página 191
CAPÍTULO 18
E agora?
\u201cA nuca é um mistério para a vista.\u201d
\u2013 Paul Valéry
Onde continuar ao terminar o curso \u2018Java para o desenvolvimento web\u2019.
18.1 - Certificação
Entrar em detalhes nos assuntos contidos até agora iriam no mínimo tornar cada capítulo quatro vezes maior
do que já é.
Os tópicos abordados (com a adição e remoção de alguns) constituem boa parte do que é cobrado na
certificação oficial para desenvolvedores Web da Sun.
Para maiores informações sobre certificações consulte a própria Sun, o http://www.javaranch.com ou o
http://www.guj.com.br, que possui diversas informações sobre o assunto.
18.2 - Frameworks
Diversos frameworks foram desenvolvidos para facilitar o trabalho de equipes de desenvolvimento.
Aqueles que pretendem trabalhar com Java devem a qualquer custo analisar as vantagens e desvantagens
da maior parte desses frameworks, que diminuem o número de linha de código necessárias e facilitam o controle
e organização de uma aplicação.
Por exemplo, o VRaptor é um exemplo de controlador simples e bom para iniciantes. O Hibernate é um
ótimo passo para persistência de