Wicket 2008
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Wicket 2008

on

  • 3,797 views

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

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

Statistics

Views

Total Views
3,797
Views on SlideShare
3,742
Embed Views
55

Actions

Likes
0
Downloads
46
Comments
0

4 Embeds 55

http://w-download.blogspot.com 34
http://w-download.blogspot.com.br 14
http://www.slideshare.net 6
http://www.w-download.blogspot.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Wicket 2008 Presentation Transcript

  • 1. Apache Wicket Produtividade na Web
  • 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
  • 5. O simples existe
  • 6. Wicket http://wicket.apache.org
  • 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
  • 27. Conceitos Aplicação Sessão RequestCycle Componentes Models Behaviors
  • 28. Aplicação Configuração Ponto de entrada (home page) Binding
  • 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
  • 37. Componentes
  • 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
  • 43. Behaviours
  • 44. Behaviours Plugins para componentes Modificam o HTML
  • 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)));
  • 47. Models
  • 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”));
  • 52. Um componente novo
  • 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>
  • 56. AJAX Como funciona no Wicket?
  • 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); } }
  • 64. Ajax DEMO
  • 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
  • 67. Muito Obrigado ! claudio@claudius.com.br http://www.claudius.com.br http://wicket.apache.org