wicket 2008

67
Apache Wicket Apache Wicket Produtividade na Web Produtividade na Web

Upload: claudio-miranda

Post on 25-May-2015

2.367 views

Category:

Technology


4 download

DESCRIPTION

Apresentacao sobre wicket, para o evento de Workshop de TI da Fundação Universa http://www.universa.org.br/evento_anterior_001.asp?evento=24

TRANSCRIPT

Page 1: Wicket 2008

Apache WicketApache WicketProdutividade na WebProdutividade na Web

Page 2: Wicket 2008

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

Agenda

Motivação para mudar

O que é o Apache Wicket?

Conceitos e componentes

Ajax

Um pouco de diversão

Page 4: Wicket 2008

Problemas

XML demais

Poluição de taglibs

Javascripts não compatíveis

Não componentizado

Complexo

Limitações

Page 5: Wicket 2008

O simples existe

Page 6: Wicket 2008

Wicket

http://wicket.apache.org

Page 7: Wicket 2008

Wicket

Framework Web

Orientado a Componentes

Open Source

Puro Java e XHTML

Simples

Page 8: Wicket 2008

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

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

Você irá encontrar ...

Programação com POJOs

Page 11: Wicket 2008

Você irá encontrar ...

Reusabilidade

● Componentes● Gerenciamento do ciclo de vida

● Fragmentos

Page 12: Wicket 2008

Você irá encontrar ...

Escalabilidade

● Suporte a replicação de sessão● Baixo estado da sessão

Page 13: Wicket 2008

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

Você irá encontrar ...

Extensibilidade

● API do framework ● Comportamento● Apresentação

Page 15: Wicket 2008

Você irá encontrar ...

Configuração em Java

● Suporte em qualquer IDE● Simplicidade● Completamento de código

Page 16: Wicket 2008

Você irá encontrar ...

Debug facilitado

● Ajax Debug Window● Apenas código Java (sem jsp, velocity,etc.)

Page 17: Wicket 2008

Você irá encontrar ...

Internacionalização

Page 18: Wicket 2008

Você irá encontrar ...

Herança de páginas HTML

Page 19: Wicket 2008

Você irá encontrar ...

Controle do botão de voltar

● Estado da sessão● Formulários POST

Page 20: Wicket 2008

Você irá encontrar ...

Persistência de estado

● Transparente● Suporte a POJO●

Page 21: Wicket 2008

Você irá encontrar ...

Cache

Page 22: Wicket 2008

Você irá encontrar ...

Componentes prontos

● Ajax, Paginação, Templates, Abas● Validação, Árvores, Tabelas, Calendário● Bookmarks, Bordas, Fragmentos

Page 23: Wicket 2008

Você irá encontrar ...

Validações

● Lado servidor e Ajax● Perda de foco

Page 24: Wicket 2008

Você irá encontrar ...

Paginação

● No cliente e no servidor● Template de paginação

Page 25: Wicket 2008

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

Maven

$ mvn archetype:generate

...

37: internal -> wicket-archetype-quickstart

(A simple Apache Wicket project)

...

Choose a number: 37

Page 27: Wicket 2008

Conceitos

Aplicação

Sessão

RequestCycle

Componentes

Models

Behaviors

Page 28: Wicket 2008

Aplicação

Configuração

Ponto de entrada (home page)

Binding

Page 29: Wicket 2008

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

Direto ao ponto

<html><head> <title>Wicket</title></head><body>

<span wicket:id="msg">Mensagem</span>

</body></html>

Page 31: Wicket 2008

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

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

Sessão

Abstrai a HttpSession

Armazena informações específicas

Page 34: Wicket 2008

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

RequestCycle

Encapsula uma requisição

Libera os recursos no final

Útil para aplicar o pattern OpenSessionInViewFilter

Tipos

Stateless

Statefull

Page 36: Wicket 2008

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

Componentes

Page 38: Wicket 2008

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

Componentes

Componentes de composição

Painéis

Bordas

Fragmentos

HerançaEspecialize componentes

Reutilize

Page 40: Wicket 2008

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

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

Componentes

Arquivos HTML

Juntos à classe correspondente

teste.wicket.Paginasrc/teste/wicket/Pagina.html

src/teste/wicket/Pagina.java

Page 43: Wicket 2008

Behaviours

Page 44: Wicket 2008

Behaviours

Plugins para componentes

Modificam o HTML

Page 45: Wicket 2008

Behaviours

Modifica atributos da marcação dos componentes

onClick, onBlur, alt,

Plugins para componentes

on

Modificam o HTML

Page 46: Wicket 2008

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

Models

Page 48: Wicket 2008

Models

Binding entre dados e componentes

Page 49: Wicket 2008

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

Models

Model simplesnew Label(“id”, “valor qualquer”);

Por propriedadenew Label(“id”, new PropertyModel(usuario, “nome”));

Page 51: Wicket 2008

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

Um componente novo

Page 53: Wicket 2008

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

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

Confirmação

<a href=”/demo/?wicket_url” onClick=”return confirm('Excluir registro?');”> Apagar</a>

Page 56: Wicket 2008

AJAX

Como funciona no Wicket?

Page 57: Wicket 2008

Ajax

Programador Java, gosta de debugar/programar em

JavaScript ?

Page 58: Wicket 2008

Ajax

Use java para programar JavaScript !

Page 59: Wicket 2008

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

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

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

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

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

Ajax

DEMO

Page 65: Wicket 2008

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

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

Muito Obrigado !

[email protected]

http://www.claudius.com.br

http://wicket.apache.org