SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
Apache Wicket
Produtividade na Web
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
Agenda


Motivação para mudar
O que é o Apache Wicket?
Conceitos e componentes
Ajax
Um pouco de diversão
Problemas
  XML demais
  Poluição de taglibs
  Javascripts não
    compatíveis
  Não componentizado
  Complexo
  Limitações
O simples existe
Wicket



http://wicket.apache.org
Wicket

Framework Web
Orientado a Componentes
Open Source
Puro Java e XHTML
Simples
XHTML e Java
<span wicket:id=”msg”>mensagem</span>
XHTML

 new Label(“msg”, “Mensagem da web”);

JAVA




          <span>Mensagem da web</span>
Renderizado no cliente
Você irá encontrar ...




                        Puro XHTML


<!DOCTYPE html PUBLIC quot;-//W3C//DTD XHTML 1.0 Transitional//ENquot;
    quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdquot;>

<html xmlns=quot;http://www.w3c.org/1999/xhtmlquot;
    xmlns:wicket=quot;http://wicket.apache.orgquot; >
Você irá encontrar ...




   Programação com POJOs
Você irá encontrar ...


                   Reusabilidade




●   Componentes
    ●   Gerenciamento do ciclo de vida
●   Fragmentos
Você irá encontrar ...



             Escalabilidade



● Suporte a replicação de sessão
● Baixo estado da sessão
Você irá encontrar ...


                Testabilidade


@Test public void navigateToSecondPage() {
     WicketTester tester = new WicketTester();
     tester.startPage(new FirstPage());
     tester.clickLink(quot;linkquot;);
     tester.assertRenderedPage(SecondPage.class);
}
Você irá encontrar ...




             Extensibilidade


●   API do framework
●   Comportamento
●   Apresentação
Você irá encontrar ...




           Configuração em Java

●   Suporte em qualquer IDE
●   Simplicidade
●   Completamento de código
Você irá encontrar ...

                  Debug facilitado
●   Ajax Debug Window
●   Apenas código Java (sem jsp, velocity,etc.)
Você irá encontrar ...




     Internacionalização
Você irá encontrar ...




   Herança de páginas HTML
Você irá encontrar ...




        Controle do botão de voltar

●   Estado da sessão
●   Formulários POST
Você irá encontrar ...




          Persistência de estado

●   Transparente
●   Suporte a POJO
●
Você irá encontrar ...




         Cache
Você irá encontrar ...




           Componentes prontos

●   Ajax, Paginação, Templates, Abas
●   Validação, Árvores, Tabelas, Calendário
●   Bookmarks, Bordas, Fragmentos
Você irá encontrar ...




                 Validações

●   Lado servidor e Ajax
●   Perda de foco
Você irá encontrar ...




                  Paginação

●   No cliente e no servidor
●   Template de paginação
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)
Maven
$ mvn archetype:generate
...
37: internal -> wicket-archetype-quickstart
(A simple Apache Wicket project)
...
Choose a number: 37
Conceitos
Aplicação
Sessão
RequestCycle
Componentes
Models
Behaviors
Aplicação



Configuração
Ponto de entrada (home page)
Binding
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>
Direto ao ponto
<html>
<head>
  <title>Wicket</title>
</head>
<body>

 <span wicket:id=quot;msgquot;>Mensagem</span>

</body>
</html>
Direto ao ponto
public class HomePage extends WebPage {
  public HomePage() {
     add(new Label(quot;msgquot;, quot;Texto Renderizado!quot;));
  }
}

public class WicketApplication extends WebApplication {
  public Class<HomePage> getHomePage() {
     return HomePage.class;
  }
}
XHTML e Java
<span wicket:id=”msg”>mensagem</span>


     new Label(“msg”, “Texto Renderizado!”);




             <span>Texto Renderizado!</span>

Renderizado no cliente
Sessão



Abstrai a HttpSession


Armazena informações específicas
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);
RequestCycle
Encapsula uma requisição
Libera os recursos no final
Útil para aplicar o pattern
 OpenSessionInViewFilter

Tipos
  Stateless
  Statefull
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
Componentes
Componentes
Encapsulam a manipulação do HTML


Respondem a eventos
  onClick, onSubmit


Sabem onde e como se renderizarem


Gerenciamento completo do ciclo de vida
Componentes
Componentes de composição
  Painéis
  Bordas
  Fragmentos

Herança
  Especialize componentes


Reutilize
Componentes
Super classe:
 org.apache.wicket.Component
           Label              ListView
         TextField        PageableListView
     RequiredTextField         Loop
      MultiLineLabel      PagingNavigator
     PasswordTextField       ImageMap
          Image                Button
           Link                Form
           Tree                Ajax...
   BookmarkablePageLink      DatePicker
Componentes
Tudo é componente
      wicket:id
 Tags associadas
 Podem ser aninhados
    Respeitando a hierarquia
Tags comuns
 <a href>, <input type>, <form>, <div>,
  <span>, etc
Componentes
Arquivos HTML
  Juntos à classe correspondente




teste.wicket.Pagina
  src/teste/wicket/Pagina.html
  src/teste/wicket/Pagina.java
Behaviours
Behaviours



Plugins para componentes


Modificam o HTML
Behaviours


Modifica atributos da marcação dos
 componentes
   onClick, onBlur, alt,


Plugins para componentes
   on


Modificam o HTML
Behaviours
Modifica atributos do HTML dos
 componentes
  alt, style, class, font ...

Adiciona eventos javascript
  onClick, onBlur, onKeyPressed ...

Adiciona tratamento Ajax

cpnt.setOutputMarkupId(true);
cpnt.add(
  new AjaxSelfUpdateBehaviour(Duration.seconds(5)));
Models
Models




Binding entre dados e componentes
Models
HTML
 <input type=”text” wicket:id=”txId” />
Java
 new TextField(“txId”,
     new PropertyModel(usuario, “nome”));



  TextField(“txId”, model)

                                              <<Usuario>>
                             PropertyModel
                                             +nome : String
                                             +cidade : String
Models



Model simples
  new Label(“id”, “valor qualquer”);
Por propriedade
  new Label(“id”, new PropertyModel(usuario, “nome”));
Models


Pelo wicked:id dos componentes
  form = new Form(“cadastro”);
  form.setModel(new CompoundPropertyModel(usuario));
  form.add(new RequiredTextField(“nome”));



Mais poder – nested properties
  form.add(new TextField(“endereco.rua”));
Um componente novo
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”, quot;return
confirm('quot;+message+quot;');quot;);
        }
    });
  }
}
Confirmação
public abstract class DeleteLink extends ConfirmLink {
        public DeleteLink(String id) {
                super(id, quot;Excluir registro?quot;);
        }
}

HTML
<a href=”#” wicket:id=”del”>Apagar</a>

Java
add(new DeleteLink(“del”) {
    public void onClick() {
       E dataObj = (E) modelObject.getObject();
       getService().delete(dataObj);
    }
});
Confirmação



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




Como funciona no Wicket?
Ajax

Programador Java, gosta de
 debugar/programar em
 JavaScript   ?
Ajax

Use java para programar
 JavaScript !
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
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)
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.
Ajax
Com uma linha de código, adicione validação Ajax,
 para o formulário inteiro


AjaxFormValidatingBehavior.
  addToAllFormComponents(form, quot;onkeyupquot;,
    Duration.ONE_SECOND);
Ajax
Label counterLabel = new Label(quot;counterquot;);
add(counterLabel);
counterLabel.setOutputMarkupId(true);
add(new AjaxLink(quot;counterLabelLinkquot;) {
    public void onClick(AjaxRequestTarget target){
        counter++;
        target.addComponent(counterLabel);
    }
}
Ajax



DEMO
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,
Concluindo ...            (finalmente)


Fácil construção e customização de
 componentes
Desenvolvimento rápido
  Baixa curva de aprendizado
    Só Java e HTML! :-)


Atualizado freqüentemente
Popular
Forte comunidade
Muito Obrigado !

claudio@claudius.com.br
http://www.claudius.com.br

http://wicket.apache.org

Weitere ähnliche Inhalte

Was ist angesagt?

Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EELoiane Groner
 
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureWindows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureVitor Ciaramella
 
20140520 Microsoft WebCamp - DataBinding with KnockoutJS
20140520 Microsoft WebCamp - DataBinding with KnockoutJS20140520 Microsoft WebCamp - DataBinding with KnockoutJS
20140520 Microsoft WebCamp - DataBinding with KnockoutJSJoão Pedro Martins
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYraquelcarsi
 
jQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicajQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicaVictor Cavalcante
 
AngularJS - 10 passos para aprender a criar suas directivas
AngularJS - 10 passos para aprender a criar suas directivasAngularJS - 10 passos para aprender a criar suas directivas
AngularJS - 10 passos para aprender a criar suas directivasJanderson Fernandes Cardoso
 
Demoiselle Behave - Visão Geral
Demoiselle Behave - Visão GeralDemoiselle Behave - Visão Geral
Demoiselle Behave - Visão GeralVanderson Silva
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Paulo Victor Gomes
 
Introdução a Big Data e Apache Solr
Introdução a Big Data e Apache SolrIntrodução a Big Data e Apache Solr
Introdução a Big Data e Apache SolrJuliano Martins
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 

Was ist angesagt? (20)

Java script aula 07 - j-query
Java script   aula 07 - j-queryJava script   aula 07 - j-query
Java script aula 07 - j-query
 
Componentes para a Web
Componentes para a WebComponentes para a Web
Componentes para a Web
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
 
Artigoajax
ArtigoajaxArtigoajax
Artigoajax
 
Windows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows AzureWindows Azure 5/8 - Recursos adicionais do Windows Azure
Windows Azure 5/8 - Recursos adicionais do Windows Azure
 
Java script aula 10 - angularjs
Java script   aula 10 - angularjsJava script   aula 10 - angularjs
Java script aula 10 - angularjs
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
JQuery
JQuery JQuery
JQuery
 
20140520 Microsoft WebCamp - DataBinding with KnockoutJS
20140520 Microsoft WebCamp - DataBinding with KnockoutJS20140520 Microsoft WebCamp - DataBinding with KnockoutJS
20140520 Microsoft WebCamp - DataBinding with KnockoutJS
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITY
 
Java script aula 09 - JQuery
Java script   aula 09 - JQueryJava script   aula 09 - JQuery
Java script aula 09 - JQuery
 
jQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicajQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmica
 
AngularJS - 10 passos para aprender a criar suas directivas
AngularJS - 10 passos para aprender a criar suas directivasAngularJS - 10 passos para aprender a criar suas directivas
AngularJS - 10 passos para aprender a criar suas directivas
 
Demoiselle Behave - Visão Geral
Demoiselle Behave - Visão GeralDemoiselle Behave - Visão Geral
Demoiselle Behave - Visão Geral
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014
 
Introdução a Big Data e Apache Solr
Introdução a Big Data e Apache SolrIntrodução a Big Data e Apache Solr
Introdução a Big Data e Apache Solr
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
Tag Libraries
Tag LibrariesTag Libraries
Tag Libraries
 
React js
React js React js
React js
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 

Andere mochten auch

Jdk Tools For Performance Diagnostics
Jdk Tools For Performance DiagnosticsJdk Tools For Performance Diagnostics
Jdk Tools For Performance DiagnosticsDror Bereznitsky
 
Tools and Tips to Diagnose Performance Issues
Tools and Tips to Diagnose Performance IssuesTools and Tips to Diagnose Performance Issues
Tools and Tips to Diagnose Performance IssuesClaudio Miranda
 
Understanding Garbage Collection
Understanding Garbage CollectionUnderstanding Garbage Collection
Understanding Garbage CollectionDoug Hawkins
 
Java Performance Monitoring & Tuning
Java Performance Monitoring & TuningJava Performance Monitoring & Tuning
Java Performance Monitoring & TuningMuhammed Shakir
 
WTF - Why the Future Is Up to Us - pptx version
WTF - Why the Future Is Up to Us - pptx versionWTF - Why the Future Is Up to Us - pptx version
WTF - Why the Future Is Up to Us - pptx versionTim O'Reilly
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 

Andere mochten auch (12)

Jdk Tools For Performance Diagnostics
Jdk Tools For Performance DiagnosticsJdk Tools For Performance Diagnostics
Jdk Tools For Performance Diagnostics
 
Gc algorithms
Gc algorithmsGc algorithms
Gc algorithms
 
Funny photos
Funny photosFunny photos
Funny photos
 
Surgery question
Surgery questionSurgery question
Surgery question
 
Surgery answers
Surgery answersSurgery answers
Surgery answers
 
Tools and Tips to Diagnose Performance Issues
Tools and Tips to Diagnose Performance IssuesTools and Tips to Diagnose Performance Issues
Tools and Tips to Diagnose Performance Issues
 
Profiling
ProfilingProfiling
Profiling
 
Basics of JVM Tuning
Basics of JVM TuningBasics of JVM Tuning
Basics of JVM Tuning
 
Understanding Garbage Collection
Understanding Garbage CollectionUnderstanding Garbage Collection
Understanding Garbage Collection
 
Java Performance Monitoring & Tuning
Java Performance Monitoring & TuningJava Performance Monitoring & Tuning
Java Performance Monitoring & Tuning
 
WTF - Why the Future Is Up to Us - pptx version
WTF - Why the Future Is Up to Us - pptx versionWTF - Why the Future Is Up to Us - pptx version
WTF - Why the Future Is Up to Us - pptx version
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Ähnlich wie Wicket 2008

Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Marcelo Rodrigues
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Bruno Borges
 
ASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoVinicius Rocha
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de ServletsMarcio Marinho
 
Introdução de web
Introdução de webIntrodução de web
Introdução de webSedu
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpRodrigo Aramburu
 
Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebBruno Borges
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontMichel Ribeiro
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusDenis L Presciliano
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersHarlley Oliveira
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgjqrd
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaEduardo Bregaida
 

Ähnlich wie Wicket 2008 (20)

Apache Wicket
Apache WicketApache Wicket
Apache Wicket
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento web
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
 
ASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoASP.NET MVC Mini Curso
ASP.NET MVC Mini Curso
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de Servlets
 
Introdução de web
Introdução de webIntrodução de web
Introdução de web
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
Workshop05
Workshop05Workshop05
Workshop05
 
Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento Web
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
servlet-requisicoes
servlet-requisicoesservlet-requisicoes
servlet-requisicoes
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta Cactus
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
Introdução Wicket
Introdução WicketIntrodução Wicket
Introdução Wicket
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 

Wicket 2008

  • 2. 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
  • 3. Agenda Motivação para mudar O que é o Apache Wicket? Conceitos e componentes Ajax Um pouco de diversão
  • 4. Problemas XML demais Poluição de taglibs Javascripts não compatíveis Não componentizado Complexo Limitações
  • 7. Wicket Framework Web Orientado a Componentes Open Source Puro Java e XHTML Simples
  • 8. XHTML e Java <span wicket:id=”msg”>mensagem</span> XHTML new Label(“msg”, “Mensagem da web”); JAVA <span>Mensagem da web</span> Renderizado no cliente
  • 9. Você irá encontrar ... Puro XHTML <!DOCTYPE html PUBLIC quot;-//W3C//DTD XHTML 1.0 Transitional//ENquot; quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdquot;> <html xmlns=quot;http://www.w3c.org/1999/xhtmlquot; xmlns:wicket=quot;http://wicket.apache.orgquot; >
  • 10. Você irá encontrar ... Programação com POJOs
  • 11. Você irá encontrar ... Reusabilidade ● Componentes ● Gerenciamento do ciclo de vida ● Fragmentos
  • 12. Você irá encontrar ... Escalabilidade ● Suporte a replicação de sessão ● Baixo estado da sessão
  • 13. Você irá encontrar ... Testabilidade @Test public void navigateToSecondPage() { WicketTester tester = new WicketTester(); tester.startPage(new FirstPage()); tester.clickLink(quot;linkquot;); tester.assertRenderedPage(SecondPage.class); }
  • 14. Você irá encontrar ... Extensibilidade ● API do framework ● Comportamento ● Apresentação
  • 15. Você irá encontrar ... Configuração em Java ● Suporte em qualquer IDE ● Simplicidade ● Completamento de código
  • 16. Você irá encontrar ... Debug facilitado ● Ajax Debug Window ● Apenas código Java (sem jsp, velocity,etc.)
  • 17. Você irá encontrar ... Internacionalização
  • 18. Você irá encontrar ... Herança de páginas HTML
  • 19. Você irá encontrar ... Controle do botão de voltar ● Estado da sessão ● Formulários POST
  • 20. Você irá encontrar ... Persistência de estado ● Transparente ● Suporte a POJO ●
  • 21. Você irá encontrar ... Cache
  • 22. Você irá encontrar ... Componentes prontos ● Ajax, Paginação, Templates, Abas ● Validação, Árvores, Tabelas, Calendário ● Bookmarks, Bordas, Fragmentos
  • 23. Você irá encontrar ... Validações ● Lado servidor e Ajax ● Perda de foco
  • 24. Você irá encontrar ... Paginação ● No cliente e no servidor ● Template de paginação
  • 25. 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)
  • 26. Maven $ mvn archetype:generate ... 37: internal -> wicket-archetype-quickstart (A simple Apache Wicket project) ... Choose a number: 37
  • 29. 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>
  • 30. Direto ao ponto <html> <head> <title>Wicket</title> </head> <body> <span wicket:id=quot;msgquot;>Mensagem</span> </body> </html>
  • 31. Direto ao ponto public class HomePage extends WebPage { public HomePage() { add(new Label(quot;msgquot;, quot;Texto Renderizado!quot;)); } } public class WicketApplication extends WebApplication { public Class<HomePage> getHomePage() { return HomePage.class; } }
  • 32. XHTML e Java <span wicket:id=”msg”>mensagem</span> new Label(“msg”, “Texto Renderizado!”); <span>Texto Renderizado!</span> Renderizado no cliente
  • 33. Sessão Abstrai a HttpSession Armazena informações específicas
  • 34. 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);
  • 35. RequestCycle Encapsula uma requisição Libera os recursos no final Útil para aplicar o pattern OpenSessionInViewFilter Tipos Stateless Statefull
  • 36. 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
  • 38. Componentes Encapsulam a manipulação do HTML Respondem a eventos onClick, onSubmit Sabem onde e como se renderizarem Gerenciamento completo do ciclo de vida
  • 39. Componentes Componentes de composição Painéis Bordas Fragmentos Herança Especialize componentes Reutilize
  • 40. Componentes Super classe: org.apache.wicket.Component Label ListView TextField PageableListView RequiredTextField Loop MultiLineLabel PagingNavigator PasswordTextField ImageMap Image Button Link Form Tree Ajax... BookmarkablePageLink DatePicker
  • 41. Componentes Tudo é componente wicket:id Tags associadas Podem ser aninhados Respeitando a hierarquia Tags comuns <a href>, <input type>, <form>, <div>, <span>, etc
  • 42. Componentes Arquivos HTML Juntos à classe correspondente teste.wicket.Pagina src/teste/wicket/Pagina.html src/teste/wicket/Pagina.java
  • 45. Behaviours Modifica atributos da marcação dos componentes onClick, onBlur, alt, Plugins para componentes on Modificam o HTML
  • 46. Behaviours Modifica atributos do HTML dos componentes alt, style, class, font ... Adiciona eventos javascript onClick, onBlur, onKeyPressed ... Adiciona tratamento Ajax cpnt.setOutputMarkupId(true); cpnt.add( new AjaxSelfUpdateBehaviour(Duration.seconds(5)));
  • 48. Models Binding entre dados e componentes
  • 49. Models HTML <input type=”text” wicket:id=”txId” /> Java new TextField(“txId”, new PropertyModel(usuario, “nome”)); TextField(“txId”, model) <<Usuario>> PropertyModel +nome : String +cidade : String
  • 50. Models Model simples new Label(“id”, “valor qualquer”); Por propriedade new Label(“id”, new PropertyModel(usuario, “nome”));
  • 51. Models Pelo wicked:id dos componentes form = new Form(“cadastro”); form.setModel(new CompoundPropertyModel(usuario)); form.add(new RequiredTextField(“nome”)); Mais poder – nested properties form.add(new TextField(“endereco.rua”));
  • 53. 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”, quot;return confirm('quot;+message+quot;');quot;); } }); } }
  • 54. Confirmação public abstract class DeleteLink extends ConfirmLink { public DeleteLink(String id) { super(id, quot;Excluir registro?quot;); } } HTML <a href=”#” wicket:id=”del”>Apagar</a> Java add(new DeleteLink(“del”) { public void onClick() { E dataObj = (E) modelObject.getObject(); getService().delete(dataObj); } });
  • 55. Confirmação <a href=”/demo/?wicket_url” onClick=”return confirm('Excluir registro?');”> Apagar </a>
  • 57. Ajax Programador Java, gosta de debugar/programar em JavaScript ?
  • 58. Ajax Use java para programar JavaScript !
  • 59. 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
  • 60. 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)
  • 61. 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.
  • 62. Ajax Com uma linha de código, adicione validação Ajax, para o formulário inteiro AjaxFormValidatingBehavior. addToAllFormComponents(form, quot;onkeyupquot;, Duration.ONE_SECOND);
  • 63. Ajax Label counterLabel = new Label(quot;counterquot;); add(counterLabel); counterLabel.setOutputMarkupId(true); add(new AjaxLink(quot;counterLabelLinkquot;) { public void onClick(AjaxRequestTarget target){ counter++; target.addComponent(counterLabel); } }
  • 65. 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,
  • 66. Concluindo ... (finalmente) Fácil construção e customização de componentes Desenvolvimento rápido Baixa curva de aprendizado Só Java e HTML! :-) Atualizado freqüentemente Popular Forte comunidade