SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
Desenvolvimento Web em
     Componentes
Agenda



•   O que é o Wicket
•   Conceitos e Funcionalidades
•   Exemplificando Componentes
•   Demos
•   Sumário
O que é o Wicket



•   Open Source (Apache Soft. Foundation)
•   Próxima geração de frameworks web?
•   Orientado a Componentes, não ações
•   Java POJOs + HTML
•   Simplicidade
•   Uma comunidade Ativa
Open Source Apache



•   Ant        •   Struts
•   Commons    •   Tapestry
•   Geronimo   •   Tomcat
•   Jakarta    •   Velocity
•   Lucene     •   Xalan
•   Maven      •   Xerces
O que é o Wicket



•   Open Source (Apache Soft. Foundation)
•   Próxima geração de frameworks web?
•   Orientado a Componentes, não ações
•   Java POJOs + HTML
•   Simplicidade
•   Uma comunidade Ativa
Frameworks Web Java


• CGI e Servlets
• Servlets com Templates
  – Webmacro, Velocity
• JSP (Model 1 – beans)
• Model 2 – o famoso MVC
  – Struts, WebWork, SpringMVC, Mavereick etc
• Baseados em Componentes
  – JSF (MyFaces, ADF Faces etc), Tapestry, Echo e
    Wicket
O que é o Wicket



•   Open Source (Apache Soft. Foundation)
•   Próxima geração de frameworks web?
•   Orientado a Componentes, não ações
•   Java POJOs + HTML
•   Simplicidade
•   Uma comunidade Ativa
Conceitos do Wicket



• Componentes
  – Tudo é um componente dentro do Wicket
    • Um componente tem um wicket:id
    • Um componente tem um markup associado
    • Um componente é uma classe Java
  – No markup: wicket:id
    • <span wicket:id=“foo”></span>
  – No Java: Component.id
    • new Label(“foor”,”bar”);
O que é o Wicket



•   Open Source (Apache Soft. Foundation)
•   Próxima geração de frameworks web?
•   Orientado a Componentes, não ações
•   Java POJOs + HTML
•   Simplicidade
•   Uma comunidade Ativa
O que é o Wicket



•   Open Source (Apache Soft. Foundation)
•   Próxima geração de frameworks web?
•   Orientado a Componentes, não ações
•   Java POJOs + HTML
•   Simplicidade
•   Uma comunidade Ativa
O que é o Wicket



•   Open Source (Apache Soft. Foundation)
•   Próxima geração de frameworks web?
•   Orientado a Componentes, não ações
•   Java POJOs + HTML
•   Simplicidade
•   Uma comunidade Ativa
Objetivos do Wicket



• Trazer de volta orientação a objetos
  para o desenvolvimento web
• Fornecer boas abstrações para aquilo
  que não te interessa
• Tornar o reuso mais fácil
• Separar responsabilidades
  – HTML para apresentação
  – Java para controle de estado e modelo
Agenda



•   O que é o Wicket
•   Conceitos e Funcionalidades
•   Exemplificando Componentes
•   Demos
•   Sumário
Funcionalidades 1/2



•   Componentização semelhante à Swing
•   Facilidade de Desenvolvimento
•   Separação de Responsabilidades
•   Segurança
•   Escalabilidade Horizontal Transparente
•   Suporte ao “Voltar” do Navegador
•   Componentes Reusáveis
•   Validação de Formulários de Forma Simples
Funcionalidades 2/2


• Uso transparente do HttpSession
• Altamente Customizável através de factories
• Módulos desconectados
• Componentes Decorativos
• Suporte a todos os elementos básicos de
  html
• Interação com atributos html
  programaticamente
• Paginação e montagem de tabelas
  simplificada
Agenda



•   O que é o Wicket
•   Conceitos e Funcionalidades
•   Exemplificando Componentes
•   Demos
•   Sumário
Conceitos do Wicket



• Componentes
  – Componentes podem ser aninhados
Conceitos do Wicket



• Componentes
  – Componentes podem ser aninhados
Conceitos do Wicket



• Modelo (Model)
  – Modelos ligam seus POJOs aos Componentes do
    Wicket
  – Modelos são o cérebro da sua aplicação
Conceitos do Wicket



• Exemplos de Modelos
  – Um modelo simples:

  add(new Label(“message”,”Globo.com”));
Conceitos do Wicket



• Exemplos de Modelos
  – Um modelo simples:

  add(new Label(“name”,new
    PropertyModel(person,”name”)));

  <span wicket:id=“name”>Este texto some</span>
Conceitos do Wicket


• Gerência de Estado
  – Estado de Componentes é armazenado na
    sessão
     • Configurado, de 1 a MAXINT, default 10 páginas
  – O tamanho da sessão pode ser minimizado
     • Memória versus tempo
     • O tamanho da sessão sempre deve ser uma
       preocupação
  – Utilize a ferramenta correta para o trabalho
     • Modelos desconectados
     • Modelos customizados
     • Gerencie o histórico de páginas.
Agenda



•   O que é o Wicket
•   Conceitos e Funcionalidades
•   Exemplificando Componentes
•   Demos
•   Sumário
Demo 1



• Como montar uma estrutura básica do
  site Wicket
• Demonstra os conceitos de:
  – Label
  – Bordas
  – Panels
  – Forms
  – ListViews
Demo 1
Demo 1
Demo 1
Demo 1
Demo 1



• Como os artefatos ficam dispostos
DEMO 2



Interagindo com outro serviço
DEMO 3



Ajax Debugging
DEMO 4



Criando uma pequena aplicação
    de cadastro de telefones
Definindo o HTML


<html>
<body>
<h1>Addresses</h1>
<table>
<!-- heading -->
<tr>
<td><span>John Doe</span></td>
<td><span>555-5555</span></td>
<td><span>friend</span></td>
</tr>
</table>
</body>
</html>
Definindo o HTML


<html>
<body>
<h1>Addresses</h1>
<table>
<!-- heading -->
<tr wicket:id=“rows”>
<td><span>John Doe</span></td>
<td><span>555-5555</span></td>
<td><span>friend</span></td>
</tr>
</table>
</body>
</html>
Definindo o HTML


<html>
<body>
<h1>Addresses</h1>
<table>
<!-- heading -->
<tr wicket:id=“rows”>
<td><span wicket:id=“name”>John Doe</span></td>
<td><span wicket:id=“telnr”>555-5555</span></td>
<td><span wicket:id=“type”>friend</span></td>
</tr>
</table>
</body>
</html>
Do HTML para o Java


public class AddressPage extends WebPage {
   public AddressPage() {

    }
}
Do HTML para o Java


public class AddressPage extends WebPage {
   public AddressPage() {
         add(addressListView = new ListView(quot;rowsquot;,addressList) {
                  public void populateItem(final ListItem listItem) {
         final Address address = (Address) listItem.getModelObject();
         listItem.add(new Label(quot;namequot;,address.getName()));
         listItem.add(new Label(quot;telnrquot;,address.getTelnr()));
         listItem.add(new Label(quot;typequot;,address.getType()));
                  }
         });
   }
}
Demo 4



• Resumindo
  – Criamos o html
  – Identificamos os componentes
  – Distribuimos id´s para eles
  – Criamos a classe java
  – Adicionamos os componentes a página
Adicionando Comportamento



• Adicionando remover a cada item
Adicionando Remover



• No html
<tr wicket:id=quot;rowsquot;>
<td><span wicket:id=quot;namequot;>John Doe</span></td>
<td><span wicket:id=quot;telnrquot;>555-5555</span></td>
<td><span wicket:id=quot;typequot;>friend</span></td>
<td><a href=quot;#quot;>Remove</a></td>
</tr>
Adcionando Comportamento



• E o wicket:id
<tr wicket:id=quot;rowsquot;>
<td><span wicket:id=quot;namequot;>John Doe</span></td>
<td><span wicket:id=quot;telnrquot;>555-5555</span></td>
<td><span wicket:id=quot;typequot;>friend</span></td>
<td><a wicket:id=“delete” href=“#”>Remove</a></td>
</tr>
Adicionando Comportamento


• E o componente do link
public void populateItem(final ListItem listItem) {
   …
   listItem.add(new Label(quot;namequot;,address.getName()));
   listItem.add(new Label(quot;telnrquot;,address.getTelnr()));
   listItem.add(new Label(quot;typequot;,address.getType()));
   listItem.add(new Link(quot;deletequot;));
}
Demo 4



• Com seu comportamento
listItem.add(new Link(quot;deletequot;) {
   public void onClick() {
        Object addr = getParent().getModelObject();
        addressList.remove(addr);
   }
});
Demo 4



• Resumo
 – Adicionamos um link ao html
 – Adicionamos o wicket:id ao link
 – Adicionamos o componente do link
 – Adicionarmos o comportamento do botão
Adicionando paginação



• Adicionando paginação
Paginação



• Mais uma vez primeiro no HTML

<tr>
<td colspan=quot;4quot;>
<span wicket:id=quot;navigatorquot;>NAVIGATOR</span>
</td>
</tr>
Paginação



• Depois no Java
public class AddressPage extends WebPage {
   public AddressPage() {
         add(addressListView = new ListView(quot;rowsquot;,addressList) {
                  public void populateItem(final ListItem listItem) {
         final Address address = (Address) listItem.getModelObject();
         listItem.add(new Label(quot;namequot;,address.getName()));
         listItem.add(new Label(quot;telnrquot;,address.getTelnr()));
         listItem.add(new Label(quot;typequot;,address.getType()));
                  }
         });
   }
}
Paginação



• A mudança é pequena
public class AddressPage extends WebPage {
   public AddressPage() {
        add(addressListView = new PageableListView(quot;rowsquot;,addressList,2) {
                 public void populateItem(final ListItem listItem) {
        final Address address = (Address) listItem.getModelObject();
        listItem.add(new Label(quot;namequot;,address.getName()));
        listItem.add(new Label(quot;telnrquot;,address.getTelnr()));
        listItem.add(new Label(quot;typequot;,address.getType()));
                 }
        });
    }
}
Paginação



• Colocando o componente do navigator

add(new PagingNavigator(quot;navigatorquot;, addressListView));
Resumo



• Resumo
 – Adicionar navegador ao html
 – Adicionar o wicket:id ao navegador
 – Mudar o tipo de lista para paginada
 – Adicionar o componente do navegador a
   Pagina
 – E fim!
Agenda



•   O que é o Wicket
•   Conceitos e Funcionalidades
•   Exemplificando Componentes
•   Demos
•   Sumário
Sumário



• Em poucos minutos
  – Criamos uma página “quase” completa

  – Só Java e html
  – Nada muito complexo de html
  – Nada muito complexo de configuração
Conclusões



• Desenvolvimento Web em
  componentes é uma opção
• O Wicket é simples
• Nada de configurações espalhadas pelo
  sistema, apenas código.
• Pode ser uma boa opção para criar
  cma´s de produtos
Mais informações


• http://wicket.apache.org

• http://www.wicket-library.com/

Mais conteúdo relacionado

Mais procurados

Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereJuliano Martins
 
Tutorial WebSocket em Java
Tutorial WebSocket em JavaTutorial WebSocket em Java
Tutorial WebSocket em Javalucascsoliveira
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Julian Cesar
 
Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Rafael Ponte
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...tdc-globalcode
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDaniel Paz
 
VueJS - Uma alternativa elegante
VueJS - Uma alternativa eleganteVueJS - Uma alternativa elegante
VueJS - Uma alternativa eleganteJonathan Bijos
 
Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Felipe Mamud
 
Aumente sua produtividade com Spring Boot
Aumente sua produtividade com Spring BootAumente sua produtividade com Spring Boot
Aumente sua produtividade com Spring BootFernando Boaglio
 
Build Automation Evolved
Build Automation EvolvedBuild Automation Evolved
Build Automation EvolvedMarcelo Diniz
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Rafael Ponte
 
Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!
Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!
Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!José Barbosa
 

Mais procurados (20)

React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
 
Python 06
Python 06Python 06
Python 06
 
Tutorial WebSocket em Java
Tutorial WebSocket em JavaTutorial WebSocket em Java
Tutorial WebSocket em Java
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)
 
React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi Builder
 
VueJS - Uma alternativa elegante
VueJS - Uma alternativa eleganteVueJS - Uma alternativa elegante
VueJS - Uma alternativa elegante
 
Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?
 
Aumente sua produtividade com Spring Boot
Aumente sua produtividade com Spring BootAumente sua produtividade com Spring Boot
Aumente sua produtividade com Spring Boot
 
Build Automation Evolved
Build Automation EvolvedBuild Automation Evolved
Build Automation Evolved
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Vue.js
Vue.jsVue.js
Vue.js
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)
 
Web2.0 e Ajax
Web2.0 e AjaxWeb2.0 e Ajax
Web2.0 e Ajax
 
Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!
Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!
Vuejs Angularjs e Reactjs. Veja as diferenças de cada framework!
 

Semelhante a Apache Wicket

Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net MvcGiovanni Bassi
 
Portlets: Let them make your virtual world
Portlets: Let them make your virtual worldPortlets: Let them make your virtual world
Portlets: Let them make your virtual worldelliando dias
 
ASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoVinicius Rocha
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPelliando dias
 
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
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Marcelo Rodrigues
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaBreno Vitorino
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de ServletsMarcio Marinho
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'C. Augusto Proiete
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 

Semelhante a Apache Wicket (20)

Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
 
Portlets: Let them make your virtual world
Portlets: Let them make your virtual worldPortlets: Let them make your virtual world
Portlets: Let them make your virtual world
 
ASP.NET MVC Mini Curso
ASP.NET MVC Mini CursoASP.NET MVC Mini Curso
ASP.NET MVC Mini Curso
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Asp.Net Mvc Dev Days09 V3 Pt
Asp.Net Mvc Dev Days09 V3 PtAsp.Net Mvc Dev Days09 V3 Pt
Asp.Net Mvc Dev Days09 V3 Pt
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
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
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em Java
 
servlet-requisicoes
servlet-requisicoesservlet-requisicoes
servlet-requisicoes
 
Angular 2
Angular 2Angular 2
Angular 2
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de Servlets
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 

Apache Wicket

  • 2. Agenda • O que é o Wicket • Conceitos e Funcionalidades • Exemplificando Componentes • Demos • Sumário
  • 3. O que é o Wicket • Open Source (Apache Soft. Foundation) • Próxima geração de frameworks web? • Orientado a Componentes, não ações • Java POJOs + HTML • Simplicidade • Uma comunidade Ativa
  • 4. Open Source Apache • Ant • Struts • Commons • Tapestry • Geronimo • Tomcat • Jakarta • Velocity • Lucene • Xalan • Maven • Xerces
  • 5. O que é o Wicket • Open Source (Apache Soft. Foundation) • Próxima geração de frameworks web? • Orientado a Componentes, não ações • Java POJOs + HTML • Simplicidade • Uma comunidade Ativa
  • 6. Frameworks Web Java • CGI e Servlets • Servlets com Templates – Webmacro, Velocity • JSP (Model 1 – beans) • Model 2 – o famoso MVC – Struts, WebWork, SpringMVC, Mavereick etc • Baseados em Componentes – JSF (MyFaces, ADF Faces etc), Tapestry, Echo e Wicket
  • 7. O que é o Wicket • Open Source (Apache Soft. Foundation) • Próxima geração de frameworks web? • Orientado a Componentes, não ações • Java POJOs + HTML • Simplicidade • Uma comunidade Ativa
  • 8. Conceitos do Wicket • Componentes – Tudo é um componente dentro do Wicket • Um componente tem um wicket:id • Um componente tem um markup associado • Um componente é uma classe Java – No markup: wicket:id • <span wicket:id=“foo”></span> – No Java: Component.id • new Label(“foor”,”bar”);
  • 9. O que é o Wicket • Open Source (Apache Soft. Foundation) • Próxima geração de frameworks web? • Orientado a Componentes, não ações • Java POJOs + HTML • Simplicidade • Uma comunidade Ativa
  • 10. O que é o Wicket • Open Source (Apache Soft. Foundation) • Próxima geração de frameworks web? • Orientado a Componentes, não ações • Java POJOs + HTML • Simplicidade • Uma comunidade Ativa
  • 11. O que é o Wicket • Open Source (Apache Soft. Foundation) • Próxima geração de frameworks web? • Orientado a Componentes, não ações • Java POJOs + HTML • Simplicidade • Uma comunidade Ativa
  • 12. Objetivos do Wicket • Trazer de volta orientação a objetos para o desenvolvimento web • Fornecer boas abstrações para aquilo que não te interessa • Tornar o reuso mais fácil • Separar responsabilidades – HTML para apresentação – Java para controle de estado e modelo
  • 13. Agenda • O que é o Wicket • Conceitos e Funcionalidades • Exemplificando Componentes • Demos • Sumário
  • 14. Funcionalidades 1/2 • Componentização semelhante à Swing • Facilidade de Desenvolvimento • Separação de Responsabilidades • Segurança • Escalabilidade Horizontal Transparente • Suporte ao “Voltar” do Navegador • Componentes Reusáveis • Validação de Formulários de Forma Simples
  • 15. Funcionalidades 2/2 • Uso transparente do HttpSession • Altamente Customizável através de factories • Módulos desconectados • Componentes Decorativos • Suporte a todos os elementos básicos de html • Interação com atributos html programaticamente • Paginação e montagem de tabelas simplificada
  • 16. Agenda • O que é o Wicket • Conceitos e Funcionalidades • Exemplificando Componentes • Demos • Sumário
  • 17. Conceitos do Wicket • Componentes – Componentes podem ser aninhados
  • 18. Conceitos do Wicket • Componentes – Componentes podem ser aninhados
  • 19. Conceitos do Wicket • Modelo (Model) – Modelos ligam seus POJOs aos Componentes do Wicket – Modelos são o cérebro da sua aplicação
  • 20. Conceitos do Wicket • Exemplos de Modelos – Um modelo simples: add(new Label(“message”,”Globo.com”));
  • 21. Conceitos do Wicket • Exemplos de Modelos – Um modelo simples: add(new Label(“name”,new PropertyModel(person,”name”))); <span wicket:id=“name”>Este texto some</span>
  • 22. Conceitos do Wicket • Gerência de Estado – Estado de Componentes é armazenado na sessão • Configurado, de 1 a MAXINT, default 10 páginas – O tamanho da sessão pode ser minimizado • Memória versus tempo • O tamanho da sessão sempre deve ser uma preocupação – Utilize a ferramenta correta para o trabalho • Modelos desconectados • Modelos customizados • Gerencie o histórico de páginas.
  • 23. Agenda • O que é o Wicket • Conceitos e Funcionalidades • Exemplificando Componentes • Demos • Sumário
  • 24. Demo 1 • Como montar uma estrutura básica do site Wicket • Demonstra os conceitos de: – Label – Bordas – Panels – Forms – ListViews
  • 29. Demo 1 • Como os artefatos ficam dispostos
  • 30. DEMO 2 Interagindo com outro serviço
  • 32. DEMO 4 Criando uma pequena aplicação de cadastro de telefones
  • 33. Definindo o HTML <html> <body> <h1>Addresses</h1> <table> <!-- heading --> <tr> <td><span>John Doe</span></td> <td><span>555-5555</span></td> <td><span>friend</span></td> </tr> </table> </body> </html>
  • 34. Definindo o HTML <html> <body> <h1>Addresses</h1> <table> <!-- heading --> <tr wicket:id=“rows”> <td><span>John Doe</span></td> <td><span>555-5555</span></td> <td><span>friend</span></td> </tr> </table> </body> </html>
  • 35. Definindo o HTML <html> <body> <h1>Addresses</h1> <table> <!-- heading --> <tr wicket:id=“rows”> <td><span wicket:id=“name”>John Doe</span></td> <td><span wicket:id=“telnr”>555-5555</span></td> <td><span wicket:id=“type”>friend</span></td> </tr> </table> </body> </html>
  • 36. Do HTML para o Java public class AddressPage extends WebPage { public AddressPage() { } }
  • 37. Do HTML para o Java public class AddressPage extends WebPage { public AddressPage() { add(addressListView = new ListView(quot;rowsquot;,addressList) { public void populateItem(final ListItem listItem) { final Address address = (Address) listItem.getModelObject(); listItem.add(new Label(quot;namequot;,address.getName())); listItem.add(new Label(quot;telnrquot;,address.getTelnr())); listItem.add(new Label(quot;typequot;,address.getType())); } }); } }
  • 38. Demo 4 • Resumindo – Criamos o html – Identificamos os componentes – Distribuimos id´s para eles – Criamos a classe java – Adicionamos os componentes a página
  • 40. Adicionando Remover • No html <tr wicket:id=quot;rowsquot;> <td><span wicket:id=quot;namequot;>John Doe</span></td> <td><span wicket:id=quot;telnrquot;>555-5555</span></td> <td><span wicket:id=quot;typequot;>friend</span></td> <td><a href=quot;#quot;>Remove</a></td> </tr>
  • 41. Adcionando Comportamento • E o wicket:id <tr wicket:id=quot;rowsquot;> <td><span wicket:id=quot;namequot;>John Doe</span></td> <td><span wicket:id=quot;telnrquot;>555-5555</span></td> <td><span wicket:id=quot;typequot;>friend</span></td> <td><a wicket:id=“delete” href=“#”>Remove</a></td> </tr>
  • 42. Adicionando Comportamento • E o componente do link public void populateItem(final ListItem listItem) { … listItem.add(new Label(quot;namequot;,address.getName())); listItem.add(new Label(quot;telnrquot;,address.getTelnr())); listItem.add(new Label(quot;typequot;,address.getType())); listItem.add(new Link(quot;deletequot;)); }
  • 43. Demo 4 • Com seu comportamento listItem.add(new Link(quot;deletequot;) { public void onClick() { Object addr = getParent().getModelObject(); addressList.remove(addr); } });
  • 44. Demo 4 • Resumo – Adicionamos um link ao html – Adicionamos o wicket:id ao link – Adicionamos o componente do link – Adicionarmos o comportamento do botão
  • 46. Paginação • Mais uma vez primeiro no HTML <tr> <td colspan=quot;4quot;> <span wicket:id=quot;navigatorquot;>NAVIGATOR</span> </td> </tr>
  • 47. Paginação • Depois no Java public class AddressPage extends WebPage { public AddressPage() { add(addressListView = new ListView(quot;rowsquot;,addressList) { public void populateItem(final ListItem listItem) { final Address address = (Address) listItem.getModelObject(); listItem.add(new Label(quot;namequot;,address.getName())); listItem.add(new Label(quot;telnrquot;,address.getTelnr())); listItem.add(new Label(quot;typequot;,address.getType())); } }); } }
  • 48. Paginação • A mudança é pequena public class AddressPage extends WebPage { public AddressPage() { add(addressListView = new PageableListView(quot;rowsquot;,addressList,2) { public void populateItem(final ListItem listItem) { final Address address = (Address) listItem.getModelObject(); listItem.add(new Label(quot;namequot;,address.getName())); listItem.add(new Label(quot;telnrquot;,address.getTelnr())); listItem.add(new Label(quot;typequot;,address.getType())); } }); } }
  • 49. Paginação • Colocando o componente do navigator add(new PagingNavigator(quot;navigatorquot;, addressListView));
  • 50. Resumo • Resumo – Adicionar navegador ao html – Adicionar o wicket:id ao navegador – Mudar o tipo de lista para paginada – Adicionar o componente do navegador a Pagina – E fim!
  • 51. Agenda • O que é o Wicket • Conceitos e Funcionalidades • Exemplificando Componentes • Demos • Sumário
  • 52. Sumário • Em poucos minutos – Criamos uma página “quase” completa – Só Java e html – Nada muito complexo de html – Nada muito complexo de configuração
  • 53. Conclusões • Desenvolvimento Web em componentes é uma opção • O Wicket é simples • Nada de configurações espalhadas pelo sistema, apenas código. • Pode ser uma boa opção para criar cma´s de produtos