Wicket 2008
-
Upload
claudio-miranda -
Category
Technology
-
view
2.366 -
download
4
description
Transcript of Wicket 2008
![Page 1: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/1.jpg)
Apache WicketApache WicketProdutividade na WebProdutividade na Web
![Page 2: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/2.jpg)
Palestrante
Consultor pela Summa-Tech
Desenvolvedor open source
Ganhador do prêmio Glassfish Awards 2008
Já trabalhou como arquiteto, consultor, programador em projetos de telecomunicação, financeiro e bancário, automação, internet e comércio eletrônico.
Palestrante em diversos eventos no Brasil e internacionais desde 2001
![Page 3: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/3.jpg)
Agenda
Motivação para mudar
O que é o Apache Wicket?
Conceitos e componentes
Ajax
Um pouco de diversão
![Page 4: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/4.jpg)
Problemas
XML demais
Poluição de taglibs
Javascripts não compatíveis
Não componentizado
Complexo
Limitações
![Page 5: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/5.jpg)
O simples existe
![Page 6: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/6.jpg)
Wicket
http://wicket.apache.org
![Page 7: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/7.jpg)
Wicket
Framework Web
Orientado a Componentes
Open Source
Puro Java e XHTML
Simples
![Page 8: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/8.jpg)
XHTML e Java
new Label(“msg”, “Mensagem da web”);
<span wicket:id=”msg”>mensagem</span>
<span>Mensagem da web</span>
XHTML
JAVA
Renderizado no cliente
![Page 9: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/9.jpg)
Você irá encontrar ...
Puro XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org" >
![Page 10: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/10.jpg)
Você irá encontrar ...
Programação com POJOs
![Page 11: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/11.jpg)
Você irá encontrar ...
Reusabilidade
● Componentes● Gerenciamento do ciclo de vida
● Fragmentos
![Page 12: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/12.jpg)
Você irá encontrar ...
Escalabilidade
● Suporte a replicação de sessão● Baixo estado da sessão
![Page 13: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/13.jpg)
Você irá encontrar ...
Testabilidade
@Test public void navigateToSecondPage() {
WicketTester tester = new WicketTester();
tester.startPage(new FirstPage());
tester.clickLink("link");
tester.assertRenderedPage(SecondPage.class);
}
![Page 14: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/14.jpg)
Você irá encontrar ...
Extensibilidade
● API do framework ● Comportamento● Apresentação
![Page 15: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/15.jpg)
Você irá encontrar ...
Configuração em Java
● Suporte em qualquer IDE● Simplicidade● Completamento de código
![Page 16: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/16.jpg)
Você irá encontrar ...
Debug facilitado
● Ajax Debug Window● Apenas código Java (sem jsp, velocity,etc.)
![Page 17: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/17.jpg)
Você irá encontrar ...
Internacionalização
![Page 18: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/18.jpg)
Você irá encontrar ...
Herança de páginas HTML
![Page 19: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/19.jpg)
Você irá encontrar ...
Controle do botão de voltar
● Estado da sessão● Formulários POST
![Page 20: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/20.jpg)
Você irá encontrar ...
Persistência de estado
● Transparente● Suporte a POJO●
![Page 21: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/21.jpg)
Você irá encontrar ...
Cache
![Page 22: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/22.jpg)
Você irá encontrar ...
Componentes prontos
● Ajax, Paginação, Templates, Abas● Validação, Árvores, Tabelas, Calendário● Bookmarks, Bordas, Fragmentos
![Page 23: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/23.jpg)
Você irá encontrar ...
Validações
● Lado servidor e Ajax● Perda de foco
![Page 24: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/24.jpg)
Você irá encontrar ...
Paginação
● No cliente e no servidor● Template de paginação
![Page 25: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/25.jpg)
E mais
Core (principal módulo)
extensions (extensões Ajax etc)
IoC (spring / guice)
date/time
velocity (templating)
auth-roles (autenticaçao e permissão)
stuff (contribuições da comunidade)
![Page 26: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/26.jpg)
Maven
$ mvn archetype:generate
...
37: internal -> wicket-archetype-quickstart
(A simple Apache Wicket project)
...
Choose a number: 37
![Page 27: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/27.jpg)
Conceitos
Aplicação
Sessão
RequestCycle
Componentes
Models
Behaviors
![Page 28: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/28.jpg)
Aplicação
Configuração
Ponto de entrada (home page)
Binding
![Page 29: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/29.jpg)
Aplicação
Definida no web.xml <filter> <filter-name>wicket.demo</filter-name> <filter-class> org.apache.wicket.protocol.http.WicketFilter </filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value> teste.WicketApplication </param-value> </init-param> </filter>
<filter-mapping> <filter-name>wicket.demo</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
![Page 30: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/30.jpg)
Direto ao ponto
<html><head> <title>Wicket</title></head><body>
<span wicket:id="msg">Mensagem</span>
</body></html>
![Page 31: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/31.jpg)
Direto ao ponto
public class HomePage extends WebPage { public HomePage() { add(new Label("msg", "Texto Renderizado!")); }}
public class WicketApplication extends WebApplication { public Class<HomePage> getHomePage() { return HomePage.class; }}
![Page 32: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/32.jpg)
XHTML e Java
new Label(“msg”, “Texto Renderizado!”);
<span wicket:id=”msg”>mensagem</span>
<span>Texto Renderizado!</span>
Renderizado no cliente
![Page 33: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/33.jpg)
Sessão
Abstrai a HttpSession
Armazena informações específicas
![Page 34: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/34.jpg)
Sessão
public class LojaSession extends WebSession { private Sacola sacola; public Sacola getSacola() {...} public void setSacola(Sacola s) {...}}
Sacola sacola = sessao.getSacola();sacola.add(produto, quantidade);
![Page 35: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/35.jpg)
RequestCycle
Encapsula uma requisição
Libera os recursos no final
Útil para aplicar o pattern OpenSessionInViewFilter
Tipos
Stateless
Statefull
![Page 36: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/36.jpg)
RequestCycle
1. Cria o objeto de requisição
2. Decodifica a requisição
3. Identifica o alvo (componente, página ...)
4. Processa o evento (onClick, onSubmit ...)
5. Responde (página, componente, arquivo ...)
6. Limpa tudo
![Page 37: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/37.jpg)
Componentes
![Page 38: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/38.jpg)
Componentes
Encapsulam a manipulação do HTML
Respondem a eventos
onClick, onSubmit
Sabem onde e como se renderizarem
Gerenciamento completo do ciclo de vida
![Page 39: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/39.jpg)
Componentes
Componentes de composição
Painéis
Bordas
Fragmentos
HerançaEspecialize componentes
Reutilize
![Page 40: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/40.jpg)
Componentes
Super classe:org.apache.wicket.Component
Label
TextField
RequiredTextField
MultiLineLabel
PasswordTextField
Image
Link
Tree
BookmarkablePageLink
ListView
PageableListView
Loop
PagingNavigator
ImageMap
Button
Form
Ajax...
DatePicker
![Page 41: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/41.jpg)
Componentes
Tudo é componente wicket:id
Tags associadas
Podem ser aninhadosRespeitando a hierarquia
Tags comuns<a href>, <input type>, <form>, <div>, <span>, etc
![Page 42: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/42.jpg)
Componentes
Arquivos HTML
Juntos à classe correspondente
teste.wicket.Paginasrc/teste/wicket/Pagina.html
src/teste/wicket/Pagina.java
![Page 43: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/43.jpg)
Behaviours
![Page 44: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/44.jpg)
Behaviours
Plugins para componentes
Modificam o HTML
![Page 45: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/45.jpg)
Behaviours
Modifica atributos da marcação dos componentes
onClick, onBlur, alt,
Plugins para componentes
on
Modificam o HTML
![Page 46: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/46.jpg)
Behaviours
Modifica atributos do HTML dos componentesalt, style, class, font ...
Adiciona eventos javascriptonClick, onBlur, onKeyPressed ...
Adiciona tratamento Ajax
cpnt.setOutputMarkupId(true);
cpnt.add(
new AjaxSelfUpdateBehaviour(Duration.seconds(5)));
![Page 47: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/47.jpg)
Models
![Page 48: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/48.jpg)
Models
Binding entre dados e componentes
![Page 49: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/49.jpg)
Models
HTML<input type=”text” wicket:id=”txId” />
Java new TextField(“txId”, new PropertyModel(usuario, “nome”));
TextField(“txId”, model)
<<Usuario>>
+nome : String+cidade : String
PropertyModel
![Page 50: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/50.jpg)
Models
Model simplesnew Label(“id”, “valor qualquer”);
Por propriedadenew Label(“id”, new PropertyModel(usuario, “nome”));
![Page 51: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/51.jpg)
Models
Pelo wicked:id dos componentesform = new Form(“cadastro”);
form.setModel(new CompoundPropertyModel(usuario));
form.add(new RequiredTextField(“nome”));
Mais poder – nested propertiesform.add(new TextField(“endereco.rua”));
![Page 52: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/52.jpg)
Um componente novo
![Page 53: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/53.jpg)
Confirmação
public abstract class ConfirmLink extends Link { public ConfirmLink(String id, String message) { super(id);
add(new AbstractBehaviour() { public void onComponentTag( Component c, ComponentTag tag) { tag.put(“onClick”, "return confirm('"+message+"');"); } }); }}
![Page 54: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/54.jpg)
Confirmação
public abstract class DeleteLink extends ConfirmLink { public DeleteLink(String id) { super(id, "Excluir registro?"); }}
HTML<a href=”#” wicket:id=”del”>Apagar</a>
Javaadd(new DeleteLink(“del”) { public void onClick() { E dataObj = (E) modelObject.getObject(); getService().delete(dataObj); }});
![Page 55: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/55.jpg)
Confirmação
<a href=”/demo/?wicket_url” onClick=”return confirm('Excluir registro?');”> Apagar</a>
![Page 56: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/56.jpg)
AJAX
Como funciona no Wicket?
![Page 57: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/57.jpg)
Ajax
Programador Java, gosta de debugar/programar em
JavaScript ?
![Page 58: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/58.jpg)
Ajax
Use java para programar JavaScript !
![Page 59: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/59.jpg)
Ajax
Suporte nativo
Troca de mensagem entre navegador/servidor
Pintura parcial de elementos da tela
Inclusão dinâmica de JS/CSS enviado pelo servidor
Console para debug (desenvolvimento)
Suporte genérico a outras bibliotecas JS
Componentes prontos para usar
![Page 60: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/60.jpg)
Ajax
Componentes Prontos
Link, Barra de Progresso, Upload,
Dialog Modal
Abas,
Element Polling – Fazer um elemento, se auto atualizar pelo servidor
Submit (formulários)
Checkbox (onchange)
Paginação de dados em tabela (com ou sem lazy loading)
![Page 61: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/61.jpg)
Ajax
Componentes Prontos
EditableLabel – editar porções de texto (textarea, checkbox)
AutoComplete TextField
LazyLoad Panel – quando existem painéis com muitas informações
AjaxButton com indicador
Facilidade em adicionar validações Ajax, em formulário convencional.
![Page 62: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/62.jpg)
Ajax
Com uma linha de código, adicione validação Ajax, para o formulário inteiro
AjaxFormValidatingBehavior.
addToAllFormComponents(form, "onkeyup",
Duration.ONE_SECOND);
![Page 63: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/63.jpg)
Ajax
Label counterLabel = new Label("counter");
add(counterLabel);
counterLabel.setOutputMarkupId(true);
add(new AjaxLink("counterLabelLink") {
public void onClick(AjaxRequestTarget target){
counter++;
target.addComponent(counterLabel);
}
}
![Page 64: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/64.jpg)
Ajax
DEMO
![Page 65: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/65.jpg)
Ajax
Considerações ao comparar com outros frameworks
Diferença na concepção do framework
Action x Componentes
Wicket: self contained
Inovação x Continuísmo
Tooling – suporte a IDE
Wicket: Java + XHTML
Outros: Vários XMLs, taglibs/freemarker/velocity,
![Page 66: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/66.jpg)
Concluindo ... (finalmente)
Fácil construção e customização de componentes
Desenvolvimento rápido
Baixa curva de aprendizadoSó Java e HTML! :-)
Atualizado freqüentemente
Popular
Forte comunidade
![Page 67: Wicket 2008](https://reader031.fdocumentos.com/reader031/viewer/2022020207/556218e0d8b42af2128b54c5/html5/thumbnails/67.jpg)
Muito Obrigado !
http://www.claudius.com.br
http://wicket.apache.org