Apache Wicket
Nosso contexto
• Há uma enorme demanda por sistemas web• Os ciclos de desenvolvimento ficaram curtos• As entregas são frequentes
Por que Wicket?
• Wicket é um framework web permite o desenvolvimento rápido e indolor de aplicativos web
O sonho de todo programador programador é
Criar um aplicativo de sucesso
Para ficar bilionário como
Bill Gates
Influente como…
Steve Jobs
Reconhecido como…
Linus Torvald
E viver sossegado como…
Um bebê
Wicket pode fazer isso tudo?
NÃO!!!!
Suas idéias é que trazem o sucesso!
Wicket pode ajudá-lo a torná-las reais
Mais um framework web?
Sobre os “outros” frameworks
Um pouco de história
• A maior parte dos frameworks web Java são baseados num modelo MVC chamado de “Modelo 2”.
O Modelo 2
Deficiências do modelo 2
• Abstração rasa da natureza stateless do procotolo HTTP.
• Administração manual do estado da IU• Excesso de artefatos• Difícil aprendizado• Baixa reutilização de código• Impossibilidade de criar IU complexas
Arquitetura Típica do Modelo 2
Conseqüências
• Induz a criação de código procedural.• Excesso de plumbing code• Progresso lento• Alto custo
Resultado final
• Processo propenso à erros • Dificuldade na evolução e manutenção• Estresse• Desespero• Apátia
Foto do resultado final
Programador em fim de projeto
Você merece mais que isso!!!
Lembra do sonho?
Wicket pode te ajudar.
Como ele difere dos demais?
Uma palavra:
Simplicidade
De que forma?
Utilizando componentes
Sobre orientação à componentes
• A aplicação é construida a partir de componentes reutilizáveis
• Componentes possuem estado• Componentes possuem comportamento
Componentes combinados criam soluções
História
• Criado por um Jonathan Locke, ex-membro da equipe de engenharia do Swing UI da Sun
• Versão 1.0 lançada em 2004• Em 2007 torna-se um projeto da Apache
Software Foundation
Influências
Echo
Swing API
Vantagens
• Código-aberto• Simples• Orientado a componentes• Separação de responsabilidades• Gerenciamento transparente do estado• Não requer configurações em XML• Integração a outros frameworks (Spring,
Hibernate)
Como Wicket faz tudo isso?
+ <HTML>
Na prática
Na práticapublic class OlaMundo extends WebPage {
public OlaMundo() {add(new Label(“mensagem”, “Ola, mundo!!!”));
}}
<html><body>
<h1 wicked:id=“message”>TEXTO A SER SUBSTITUIDO </h1></body></html>
<html><body>
<h1 wicked:id=“message”>Ola, mundo!!!</h1></body></html>
+
=
Conceitos
• Componente• Modelos• Templates• Application• Session
Componente Wicket
• Bloco fundamental da aplicação• Responsável sua própria apresentação• Responde eventos• Componentes podem ser aninhados numa
árvore• Mantém os dados num objeto modelo• Existem mais de 220 componentes no Wicket
Core e no Wicket Extensions
Componentes Wicket
Componentes Wicket
• Cada instância possui um ID único• O template deve conter um markup
equivalente identificado pelo atributo wicket:id
• Javanew Label(“telefone”,”011-222-1111”);
• HTML<span wicket:id=“telefone”>XXX</span>
Componentes Wicket
• Podem estar associados ou não a um template HTML próprio.
Componentes Wicket
• Componentes com templates associados– Page, Panel, Border, Fragment– A classe e template do componente devem estar
no mesmo pacote e ter o mesmo nome
Exemplo:src/com/acme/comp/Slider.javasrc/com/acme/comp/Slider.html
Componentes Wicket
• Componentes sem templates associados– Label, Button, DropDown, Link, Form e outros– Seus templates encontram-se junto a uma
superclasse
Conceitos
• Componente• Modelos• Templates• Application• Session
Modelos
• Implementam a interface Imodel• Encapsulam os objetos de domínio• Ligam os componentes aos objetos do
domínio
Modelos
Exemplos:add(new Label(“nome”, “João”));
add(new Label(“nome”, new PropertyModel(pessoa, “nome”)));
<span wicket:id=“nome”>XYZ</span>
Conceitos
• Componente• Modelos• Templates• Application• Session
Templates
• Escritos em HTML• Os webdesigner pode trabalhar com suas
ferramentas favoritas• As ligações com os componentes são feitas
por meio do atributo wicket:id
Conceitos
• Componente• Modelos• Templates• Application• Session
Application
• Ponto de entrada da aplicação web• Iniciação• Configuração• Configurada no web.xml• Define página home
Conceitos
• Componente• Modelos• Templates• Application• Session
Session
• Mantém o estado da aplicação para um usuário
• Podem ser personalizadas• Com sessões personalizadas pode-se conhecer
o que pode ser armazenado nelas• Sessões personalizadas são type-safe
Criando aplicações com Wicket
Criando aplicações com Wicket
• A forma mais rápida é utilizando um archetype maven$ mvn archetype:create
-DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.3.4 -DgroupId=com.acme-DartifactId=agenda$ cd agenda$ mvn eclipse:eclipse
Criando aplicações com Wicket<html><head><title>Agenda</title></head><body><h1>Endereços</h1><table><tr><td><span>Adrián Dantas</span></td><td><span>880-2600</span></td><td><span>Analista</span></td></tr></table></body></html>
Criando aplicações com Wicket<html><head><title>Agenda</title></head><body><h1>Endereços</h1><table><tr wicket:id="registros"><td><span>Adrián Dantas</span></td><td><span>880-2600</span></td><td><span>Analista</span></td></tr></table></body></html>
Criando aplicações com Wicket<html><head><title>Agenda</title></head><body><h1>Endereços</h1><table><tr wicket:id="registros"><td><span wicket:id="nome">Adrián Dantas</span></td><td><span wicket:id=”telefone">880-2600</span></td><td><span wicket:id=”profissao">Analista</span></td></tr></table></body></html>
Criando aplicações com Wicketpackage com.acme.paginas;
import org.apache.wicket.PageParameters;import org.apache.wicket.markup.html.WebPage;import org.apache.wicket.markup.html.basic.Label;
public class ListaPage extends WebPage {public ListaPage(final PageParameters parameters) {
// Configuracao dos componentes da pagina}
}
Criando aplicações com Wicketpublic class ListaPage extends WebPage {public ListaPage(final PageParameters parameters) {
add(registrosListView = new ListView("registros", registrosList) {protected void populateItem(ListItem item) {
final Registro registro = (Registro) item.getModelObject();item.add(new Label("nome", registro.getNome()));item.add(new Label("telefone",
registro.getTelefone()));item.add(new Label("profissao",
registro.getProfissao()));}
});}
Resumo
• Wicket fornece um ambiente rápido de desenvolvimento de aplicações web
• Os desenvolvedores podem se concentrar na lógica de negócios
• Utiliza componentes em Java e HTML para apresentação
• É simples e divertido!
Referências
• Website– http://wicket.apache.org/
• Wiki– http://cwiki.apache.org/WICKET/
• IRCNos servidores Freenode ##[email protected]
Perguntas
OBRIGADO!!!