2. Felipe Fedel Pinto
(Amaral)
• UNESP Rio Claro - 2007
• Ampliato - Tecnologia da
Informação e Consultoria
• Trabalha com Wicket desde
2010
• Contribui para projetos
externos de Wicket
3. Sumário
• O que é Wicket?
• Conceitos
• Novidades
• Mais informações
• Perguntas
• Contato
15. Um framework Web open source
orientado a componentes que usa
apenas Java e HTML
(Sem XML)
16. Apenas Java
• Componentes são objetos
• Lógica
• Orientação a objetos
- new, extends, implements, etc...
• POJO (Plain Old Java Object)
• Similar a Swing
17. POJO
public class Carro implements java.io.Serializable {
private String nome;
private String cor;
public Carro() {
}
public Carro(String nome, String cor) {
this.nome = nome;
this.cor = cor;
}
public String getCor() {
return cor;
}
public void setCor(String cor) {
this.cor = cor;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
18. Apenas HTML
• Murkup limpo (Sem lógica)
• “Holders” para os componentes
• HTML 5, CSS 3
• Desenvolvedores não estragam o
design
• Designers não estragam no código
36. Components
• Lógica
Component
• Manipula o markup
• Renderiza conteúdo
• Recebe e manipula
eventos
- onClick(),
onMouseOver(), Markup Model
onSubmit()
• Possui model...ou não
• Devem ser reutilizáveis!
37. Components
Label DatePicker
RepeatingView
Link
PasswordTextField Page
AjaxFallbackLink
Tree
Form
DataTable
TextField Image
AjaxButton
Button ListView
Panel
E muitos outros...
38. Components
• Componente possui identificadormesmo pacote
Java e Markup no
(wicket:id)
- new Label(“mensagem”, “Hello, World!”)
• Markup possui identificador
(wicket:id)
- <h1 wicket:id=”mensagem”>[Mensagem]</h1>
39. Components
• Poder ser aninhados (Árvore)
<a wicket:id="link">
<span wicket:id="label">[TEXTO]</span>
</a>
Link link = new Link("link"){...};
add(link);
link.add(new Label("label", "Texto"));
40. Components
• Recebe e manipula eventos
public class EditaAlunoForm extends Form<Aluno>{
public EditaAlunoForm(String id, Aluno aluno) {
super(id);
}
@Override
protected void onSubmit() {
salvar();
setResponsePage(ListaAlunosPage.class);
super.onSubmit();
}
}
46. Ajax
(Asynchronous JavaScript and XML)
• Reunião de várias tecnologias
• Requisições assíncronas
• Objeto XMLHttpRequest
• Sem reload
• Atulização da árvore DOM
48. Ajax Behaviors
• Podem renderizar novamente os componentes
- target.add(componente);
• Podem executar códigos JavaScript
- target.appendJavaScript("seuComandoJS('');");
• Regulam a execução dos eventos no cliente
- behavior.setThrottleDelay(Duration.seconds(10));
• Podem adicionar novos recursos ao header
- Arquivos JavaScript, CSS, etc.
57. Exemplo Form
public FormPage() {
setUsuario(new Usuario());
final Label nome_label = new Label("nome", new PropertyModel<String>(usuario, "nome"));
nome_label.setOutputMarkupId(true);
final Label email_label = new Label("email", new PropertyModel<String>(usuario, "email"));
email_label.setOutputMarkupId(true);
add(nome_label);
add(email_label);
}
59. Exemplo Form
public FormPage() {
setUsuario(new Usuario());
final Label nome_label = new Label("nome", new PropertyModel<String>(usuario, "nome"));
nome_label.setOutputMarkupId(true);
final Label email_label = new Label("email", new PropertyModel<String>(usuario, "email"));
email_label.setOutputMarkupId(true);
add(nome_label);
add(email_label);
Form<Usuario> form = new Form<Usuario>("form",
new CompoundPropertyModel<Usuario>(usuario));
// adiciona os componentes no form
form.add(new TextField<String>("nome"));
form.add(new EmailTextField("email"));
}
61. Exemplo Form
public FormPage() {
setUsuario(new Usuario());
final Label nome_label = new Label("nome", new PropertyModel<String>(usuario, "nome"));
nome_label.setOutputMarkupId(true);
final Label email_label = new Label("email", new PropertyModel<String>(usuario, "email"));
email_label.setOutputMarkupId(true);
add(nome_label);
add(email_label);
Form<Usuario> form = new Form<Usuario>("form",
new CompoundPropertyModel<Usuario>(usuario));
// adiciona os componentes no form
form.add(new TextField<String>("nome"));
form.add(new EmailTextField("email"));
form.add(new AjaxSubmitLink("button") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.add(nome_label);
target.add(email_label);
super.onSubmit(target, form);
}
});
}
62. Wicket 6.0
• Versão anterior: 1.5.8 (Java 1.5 ou >)
• Atual: Java 6 ou >
• JQuery
• HTML 5
• WebSocket nativo
• Servlet 3.0
63. Prós
•Separação entre lógica e exibiçao
•POJO
•Sem XML
•Orientado a componentes
•Ajax sem dificuldades
•Comunidade ativa