apache wicket
DESCRIPTION
Apresentação em português sobre o apache wicket.TRANSCRIPT
Desenvolvimento Web em Componentes
• O que é o Wicket
• Conceitos e Funcionalidades
• Exemplificando Componentes
• Demos
• Sumário
Agenda
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
• Commons
• Geronimo
• Jakarta
• Lucene
• Maven
• Struts
• Tapestry
• Tomcat
• Velocity
• Xalan
• 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
• O que é o Wicket
• Conceitos e Funcionalidades
• Exemplificando Componentes
• Demos
• Sumário
Agenda
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
• O que é o Wicket
• Conceitos e Funcionalidades
• Exemplificando Componentes
• Demos
• Sumário
Agenda
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.
• O que é o Wicket
• Conceitos e Funcionalidades
• Exemplificando Componentes
• Demos
• Sumário
Agenda
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("rows",addressList) {
public void populateItem(final ListItem listItem) {
final Address address = (Address) listItem.getModelObject();
listItem.add(new Label("name",address.getName()));
listItem.add(new Label("telnr",address.getTelnr()));
listItem.add(new Label("type",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="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>
<td><a href="#">Remove</a></td>
</tr>
Adcionando Comportamento
• E o wicket:id<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>
<td><a wicket:id=“delete” href=“#”>Remove</a></td>
</tr>
Adicionando Comportamento
• E o componente do linkpublic void populateItem(final ListItem listItem) {
…
listItem.add(new Label("name",address.getName()));
listItem.add(new Label("telnr",address.getTelnr()));
listItem.add(new Label("type",address.getType()));
listItem.add(new Link("delete"));
}
Demo 4
• Com seu comportamentolistItem.add(new Link("delete") {
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="4">
<span wicket:id="navigator">NAVIGATOR</span>
</td>
</tr>
Paginação
• Depois no Java
public class AddressPage extends WebPage {
public AddressPage() {
add(addressListView = new ListView("rows",addressList) {
public void populateItem(final ListItem listItem) {
final Address address = (Address) listItem.getModelObject();
listItem.add(new Label("name",address.getName()));
listItem.add(new Label("telnr",address.getTelnr()));
listItem.add(new Label("type",address.getType()));
}
});
}
}
Paginação
• A mudança é pequena
public class AddressPage extends WebPage {
public AddressPage() {
add(addressListView = new PageableListView("rows",addressList,2) {
public void populateItem(final ListItem listItem) {
final Address address = (Address) listItem.getModelObject();
listItem.add(new Label("name",address.getName()));
listItem.add(new Label("telnr",address.getTelnr()));
listItem.add(new Label("type",address.getType()));
}
});
}
}
Paginação
• Colocando o componente do navigator
add(new PagingNavigator("navigator", 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!
• O que é o Wicket
• Conceitos e Funcionalidades
• Exemplificando Componentes
• Demos
• Sumário
Agenda
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/