03 maio 2007
Apache Wicket: agora é oficial!
Antes de anunciar para os brasileiros, um pouco da introdução (para aqueles que não leram meu primeiro post:
-= Apache Wicket =-
Apache Wicket é um framework web orientado a componentes, no momento sob os cuidados da Apache Software Foundation e sua incubadora. Com distinção entre lógica e código HTML, um modelo de dados em POJOs e ser livre de XML, o Apache Wicket simplifica e diverte o desenvolvimento de aplicações Web. Facilite seu desenvolvimento trocando complexidade por um poderoso mecanismo de reutilização de componentes escritos em puro Java e HTML.
Vocês podem encontrar outras informações aqui: http://incubator.apache.org/wicket
-= Este lançamento =-
Este é o primeiro de uma série de betas antes de uma confiança maior do time para finalizar o Apache Wicket 1.3 e lançá-lo sem bugs. Considere-o um Release Candidate.
- Migrando do Wicket 1.2 -
Aos que já utilizam o Wicket 1.2, o guia de migração para Wicket 1.3 encontra-se disponível no seguinte endereço: http://cwiki.apache.org/WICKET/migrate-13.html
- Download -
Este lançamento pode ser baixado no seguinde endereço:
http://people.apache.org/dist/incubator/wicket/apache-wicket-1.3.0-incubating-beta1/dist/
- Download com Maven -
Repositório:
http://people.apache.org/dist/incubator/wicket/apache-wicket-1.3.0-incubating-beta1/m2-repo/
- Bugs -
No caso de bugs serem encontrados, pedimos que submetam os mesmos no JIRA:
http://issues.apache.org/jira/browse/WICKET
Caso queira contribuir enviando patches de bugs, utilize a seguinte tag:
http://svn.apache.org/repos/asf/incubator/wicket/tags/wicket-1.3.0-incubating-beta-1/
-= Incubadora Apache Wicket =-
Maiores informações sobre o andamento do processo na incubadora:
http://incubator.apache.org/projects/wicket
[]'s!!
miojo
28 abril 2007
Wicket: Paginando listagens em 3 passos
Algumas pessoas comentaram no primeiro post sobre Wicket pedindo que eu desse maiores detalhes de como funciona ou como se utiliza. Pensei bastante e achei melhor primeiro apresentar como o desenvolvedor utiliza o framework, antes de se preocupar em como o mesmo funciona "por trás das cortinas".
Para começar a enteder a paginação, primeiramente é importante entendermos o funcionamento do componente básico de repetição: ListView. Vejam o exemplo a seguir:
Pessoas.html
<table>
<tr>
<td>nome</td>
<td>idade</td>
</tr>
<tr wicket:id="lista">
<td><span wicket:id="nome">foo</span></td>
<td><span wicket:id="idade">12</span></td>
</tr>
</table>
Pessoas.java
public class Pessoas extends WebPage {
public Pessoas() {
List listaPessoas; /* obtem de algum lugar (Spring talvez) */
add(new ListView("lista", listaPessoas) {
protected void populateItem(ListItem item) {
Pessoa p = (Pessoa) item.getModelObject();
item.add(new Label("nome", p.getNome());
item.add(new Label("idade", p.getIdade());
}
});
}
}
Entendendo o funcionamento do ListView:
- O bind foi feito com a tag <tr>, então para cada iteração na List, o ListView vai processar um ListItem para aquela tag.
- O framework possui hierarquia de componentes, então vejam que o Label é adicionado no ListItem e não na ListView. Isto porque no HTML, temos e nome e idade dentro da lista.
- Para cada objeto na lista, o framework coloca ele como ModelObject do ListItem. (farei um post futuramente sobre Models, explicando seu funcionamento e os diversos tipos).
Agora, vamos adicionar paginação nesta ListView. Para isto, precisamos executar alguns passos:
- Editar o HTML e acrescentar a barra de navegação.
- Converter a ListView para uma PageableListView.
- Adicionar em Java o componente PagingNavigator, realizando binding entre ele e a barra de navegação.
Utilizaremos aqui uma barra de navegação default do Wicket, sem customização. Deve-se adicionar na tabela a seguinte TR:
<tr>Passo 2
<td colspan="2">
<span wicket:id="navegacao">aqui vai a barra de navegacao</span>
</td>
</tr>
Alterar a instanciação de uma ListView para uma PageableListView. Feito isto, é preciso informar no construtor, quantos itens serão apresentados por página:
PageableListView listView = null;
add(listView = new PageableListView("lista", listaPessoas, 2) { ...
Passo 3
Agora, falta apenas colocar o componente de navegação na classe Java:
add(new PagingNavigator("navegacao", listView));
Pronto! Só reparem que no construtor de PagingNavigator, é preciso passar a referência para o PageableListView que será paginado por ele.
O que aprendemos?
Que utilizando Wicket, não sujamos nosso código HTML, nem mesmo para fazer paginação! É possível manter o HTML limpo para que os designers possam trabalhar sem problemas, e também, que nós programadores tenhamos apenas um ponto para modificar, como neste exemplo onde alteramos de uma simples listagem para uma listagem paginada, o controle dinâmico das telas: a classe Java! Pois em Wicket não existe configuração em XML. Este é todo o código necessário para que esta paginação funcione.
Confiram mais exemplos aqui:
Wicket Repeater Views
Até a próxima!
[]'s!
miojo
26 abril 2007
Wicket - Apresentação SouJava
(se eu fizer outra agora hoje, acredito que irá mais gente!)
Então, publico aqui os slides que mostrei na época, para dar uma idéia melhor do funcionamento e espero que acompanhem mais de perto o crescimento do Wicket!
[]'s!!!
miojo
23 abril 2007
Wicket! ... Hein?
Muitos dos meus amigos estranharam ao pronunciar essa palavra, Wicket. E até concordo que é estranha, mas apesar do nome, que agora mudou para... Apache Wicket, acredito que a credibilidade só de ouvir o nome aumentará consideravelmente.
O que é o Wicket?
É parecido com o Struts/JSF?
Graças a Deus... não!! Trabalhei com Struts durante 2 anos e meio, e recentemente me arrisquei a usar JSF para uma ferramenta interna, e minha conclusão? Struts == JSF = true; Ou seja, se eu já não gostava de Struts, JSF definitivamente não me agrada muito. Apesar disso, essas duas tecnologias são fortes e devem ser respeitadas. Agora, quanto ao Wicket, devo dizer que ele preenche lacunas que antes Struts/JSF nos deixavam extremamente irritados.
Conhecem o termo SOP? Não, não digitei errado SOAP. Acontece que desenvolver aplicativos Web com Struts/JSF, a gente acaba entrando numa metodologia chamada String Oriented Programming. Onde temos que localizar num arquivo xml o retorno de um método, para saber para onde vai aquele maldito... return "success";. Não apenas isso, mas em muitos outros casos como bind de componentes da página, atributos e campos, com o que você está codificando em Java.Então, o que ganho?
Um desenvolvimento prático e 99,9% separando o que é código dinâmico e o que é código estático (leia-se: Java, HTML, JavaScript). Essa é apenas uma das inúmeras vantagens que se obtém utilizando Wicket para desenvolver aplicações Web. Mas de início, comento aqui esta vantagem.
O seu designer terá total liberdade para mexer no design, layout e estrutura (no caso da estrutura, existem limites, claro), sem ferrar com o código dinâmico, pois este fica em um arquivo separado. Que tipo de arquivo é esse? Adivinha: .java! Sim, para cada página existe uma classe Java para controlar os componentes dinâmicos e estado que esta terá durante o fluxo do site. Isso dá ao designer, preview direto no browser, sem aquelas tags malucas de Struts/JSF ou Velocity, que detonam com o Dreamweaver, Nvu e outros WYSIWYG. Tudo isso graças a um HTML limpo de tags. É possível desenvolver um website, utilizando o protótipo que o cliente enviou, fazendo algo em torno de 5% a 15% de alterações no código HTML, e mantendo-o totalmente funcional direto no browser.
Vamos ver um exemplo de uma página Wicket (aquele infernal Hello World):
<html>
<head><title>Hello Wicket</title></head>
<body>
<span wicket:id="usuario">Bruno Borges</span>
</body>
</html>
E aqui, a classe Java colocando um valor diferente no componente usuario:
public class UsuarioPage extends WebPage {
public UsuarioPage() {
add(new Label("usuario", "Nissim Miojo"));
}
}
Abrindo o arquivo UsuarioPage.html temos um preview puro de uma página estática com o conteúdo Bruno Borges. Agora, se executarmos através do framework Wicket, o conteúdo Nissim Miojo substituirá o valor de protótipo do componente usuário. No que isso é bom? Manter um protótipo funcional e facilitar que o designer faça alterações sem ferrar com o código! :D
E o que mais?
Tem muito mais! Mas agora está tarde, e vou dormir. Quando me inspirar outra vez, posto mais coisas!
[]'s!!
miojo
22 abril 2007
Atualizando minha "second life"
- Mudei o layout e acrescentei/removi algumas informações e componentes deste blog;
- Desbaguncei todas as fotos que estão no meu computador;
- Criei meu album online no Picasa Web e publiquei algumas já;
- Criei uma Wiki para manter online um tipo de base de conhecimento próprio sobre softwares e outras coisas, para lembrar algo do tipo "como que fiz aquela instalação mesmo?"
- Registrei o domínio brunoborges.com.br e utilizarei ele como raiz para meus sites pessoais (blog, wiki, album);
- Atualizei minha rádio no Last.FM (vejam que existe um componente na lateral para ver o que ando escutando recentemente);
- Publiquei no IMDb.com a lista de filmes que já assisti (ainda faltam muitos outros, mas já é um começo);
- E tem também aqui a lista de livros que já lí. Talvez eu coloque elas num post próprio aqui no Blogspot, mantendo-o atualizado;
[]'s!
| |||
|