Wicket 2008

2,657 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Wicket 2008

  1. 1. Apache Wicket Produtividade na Web
  2. 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. 3. Agenda Motivação para mudar O que é o Apache Wicket? Conceitos e componentes Ajax Um pouco de diversão
  4. 4. Problemas XML demais Poluição de taglibs Javascripts não compatíveis Não componentizado Complexo Limitações
  5. 5. O simples existe
  6. 6. Wicket http://wicket.apache.org
  7. 7. Wicket Framework Web Orientado a Componentes Open Source Puro Java e XHTML Simples
  8. 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. 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. 10. Você irá encontrar ... Programação com POJOs
  11. 11. Você irá encontrar ... Reusabilidade ● Componentes ● Gerenciamento do ciclo de vida ● Fragmentos
  12. 12. Você irá encontrar ... Escalabilidade ● Suporte a replicação de sessão ● Baixo estado da sessão
  13. 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. 14. Você irá encontrar ... Extensibilidade ● API do framework ● Comportamento ● Apresentação
  15. 15. Você irá encontrar ... Configuração em Java ● Suporte em qualquer IDE ● Simplicidade ● Completamento de código
  16. 16. Você irá encontrar ... Debug facilitado ● Ajax Debug Window ● Apenas código Java (sem jsp, velocity,etc.)
  17. 17. Você irá encontrar ... Internacionalização
  18. 18. Você irá encontrar ... Herança de páginas HTML
  19. 19. Você irá encontrar ... Controle do botão de voltar ● Estado da sessão ● Formulários POST
  20. 20. Você irá encontrar ... Persistência de estado ● Transparente ● Suporte a POJO ●
  21. 21. Você irá encontrar ... Cache
  22. 22. Você irá encontrar ... Componentes prontos ● Ajax, Paginação, Templates, Abas ● Validação, Árvores, Tabelas, Calendário ● Bookmarks, Bordas, Fragmentos
  23. 23. Você irá encontrar ... Validações ● Lado servidor e Ajax ● Perda de foco
  24. 24. Você irá encontrar ... Paginação ● No cliente e no servidor ● Template de paginação
  25. 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. 26. Maven $ mvn archetype:generate ... 37: internal -> wicket-archetype-quickstart (A simple Apache Wicket project) ... Choose a number: 37
  27. 27. Conceitos Aplicação Sessão RequestCycle Componentes Models Behaviors
  28. 28. Aplicação Configuração Ponto de entrada (home page) Binding
  29. 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. 30. Direto ao ponto <html> <head> <title>Wicket</title> </head> <body> <span wicket:id=quot;msgquot;>Mensagem</span> </body> </html>
  31. 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. 32. XHTML e Java <span wicket:id=”msg”>mensagem</span> new Label(“msg”, “Texto Renderizado!”); <span>Texto Renderizado!</span> Renderizado no cliente
  33. 33. Sessão Abstrai a HttpSession Armazena informações específicas
  34. 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. 35. RequestCycle Encapsula uma requisição Libera os recursos no final Útil para aplicar o pattern OpenSessionInViewFilter Tipos Stateless Statefull
  36. 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. 37. Componentes
  38. 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. 39. Componentes Componentes de composição Painéis Bordas Fragmentos Herança Especialize componentes Reutilize
  40. 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. 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. 42. Componentes Arquivos HTML Juntos à classe correspondente teste.wicket.Pagina src/teste/wicket/Pagina.html src/teste/wicket/Pagina.java
  43. 43. Behaviours
  44. 44. Behaviours Plugins para componentes Modificam o HTML
  45. 45. Behaviours Modifica atributos da marcação dos componentes onClick, onBlur, alt, Plugins para componentes on Modificam o HTML
  46. 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. 47. Models
  48. 48. Models Binding entre dados e componentes
  49. 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. 50. Models Model simples new Label(“id”, “valor qualquer”); Por propriedade new Label(“id”, new PropertyModel(usuario, “nome”));
  51. 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. 52. Um componente novo
  53. 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. 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. 55. Confirmação <a href=”/demo/?wicket_url” onClick=”return confirm('Excluir registro?');”> Apagar </a>
  56. 56. AJAX Como funciona no Wicket?
  57. 57. Ajax Programador Java, gosta de debugar/programar em JavaScript ?
  58. 58. Ajax Use java para programar JavaScript !
  59. 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. 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. 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. 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. 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. 64. Ajax DEMO
  65. 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. 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. 67. Muito Obrigado ! claudio@claudius.com.br http://www.claudius.com.br http://wicket.apache.org

×