Wicket Framework

Fiz dois posts sobre Wicket no blog, aos interessados em conhecer um framework que segue a linha do Tapestry, mas é bem menos complexo. :slight_smile:

http://blog.brunoborges.com.br/search/label/Wicket

[]'s!
miojo

O problema principal é a mudança de paradigma. As pessoas estão acostumadas a anos com o modelo action-based (2-step servlet request/forward) que para entender e aceitar isso leva um tempo.

Mas não custa fazer uma força, para não correr o risco de ficar pra trás.

Entendi que:

<form ...>

<mtw:input name="username" />

</form>

Vai ferrar o dreamweaver !!!

E isso aqui que o Wicket faz:


<form ...>

<input wicket:id="username" name="username" />

</form>

Não vai!

Agora caiu a ficha: Uma coisa é tag JSP outra coisa é uma template.

Me parece que o wicket chupa a página e substitui o código html marcado com wicket:id por um código html dinamico.

Perguntas:

  • Por que precisa marcar a tag html input com wicket:id ??? O wicket não poderia procurar o input que tem o nome username e substituí-lo, sem necessidade de poluir a tag html com o wicket:id ?

  • Será que não dá para transformar uma página JSP cheia de tags JSP em um template??? Dessa forma faríamos:


<input mtw name ="username" />

E o template executaria a tag mtw:input e colocaria o resultado no html no lugar da tag acima ??? (Seria isso tecnicamente possível !!!??? Alguém já conseguiu/tentou fazer isso ???)

  • Um comentário meio bobo, frescura mesmo, mas acho que vale a pena mencionar, principalmente para aqueles que estão começando:

Não programe assim:


package wicket.examples.helloworld;

import wicket.protocol.http.WebApplication;

public class HelloWorldApplication extends WebApplication
{
    public HelloWorldApplication()
    {
    }
    
    public Class getHomePage() 
    {
        return HelloWorld.class;
    }
}

Dói o olho. Dói o cérebro. É feio demais!

A Sun e o bom-senso recomendam que vc programe assim:

(Mais sobre convenção de código aqui: http://java.sun.com/docs/codeconv/html/CodeConventions.doc10.html#182)


package wicket.examples.helloworld;

import wicket.protocol.http.WebApplication;

public class HelloWorldApplication extends WebApplication {

    public HelloWorldApplication() {

    }
    
    public Class getHomePage() {

        return HelloWorld.class;
    }
}

Quando eu vejo alguém programando com a indentação desse jeito, fico meio ressabiado… Mas é claro que a qualidade do wicket não vai depender disso…

Olá

Eu sempre programei assim. Só parei depois que eu mesmo há uns 7 anos atrás forcei a equipe a padronizar o código com as regras da Sun (que neste caso para mim, Dói o olho. Dói o cérebro. É feio demais!)

[]s
Luca

O conceito Component-based vem justamente para agilizar o entendimento e abstrair o funcionamento Request/Forward/Response atrelados ao desenvolvimento Web.

De acordo, JSF já implementa conceitos de Component-based. Ficar no Action-based seria, além de inapropriado, também fora dos padrões de hoje em dia (JSF).

Negativo. Wicket não modifica (grosseiramente falando) o HTML original. Entenda este exemplo:

<span wicket:id="nome" />

É uma tag span fechada. Se em Wicket eu tiver um Label(“nome”, “bruno”);, o output do html será:

<span />

Pois este era o html original, certo? Tag fechada. Para funcionar corretamente, a tag deve ser:

<span wicket:id="nome">Exemplo de Nome</span>

Porque uma coisa é o namespace CSS (atributo id), outra coisa é o Binding Wicket. Como o framework é Component-based, então suporta reutilização destes componentes. E como saber que um componente que apresenta informação do usuário já possui um campo id=“nome” ? Isso quebraria o html que reutiliza este componente. E quebraria o CSS.

Desnecessário o comentário, mas beleza. :slight_smile:

[]'s !!!

Cara, muito legal saber que tem gente que conhece, e usa!, Wicket além de mim. Até então me considerava solitário no Brasil :).

Sérgio, você queria uma comparação entre Wicket e Mentawaii. Não tive tempo (nem saco) pra fazer uma tabela comparativa, então preferi postar no meu blog, como se implementa paginação nele. Peguei mais ou menos o exemplo que você desenhou para a Paginator Tag do Mentawaii.

Dêem uma conferida!!

[]’ s
miojo

Fala Miojo!

Com a questão de “não poluir o código html e não ferrar o dreamweaver”, acho que eu e todo mundo já concordamos que isso realmente é muito bom e que usando uma tag JSP vc não vai conseguir isso.

Uma questão que ficou: Se o disigner quiser incrementar a paginação, por exemplo colocar o link de navegação em outro lugar, mudar o formato do link, etc e tal ???

Me parece que a coisa ficou mais flexível para o designer usando tags JSP mesmo. O código HTML que vc postou é muito pouco flexível, ou seja, o designer vai ficar de mão amarrada para mudar qualquer aspecto da paginação. Me pareceu que para mudar tem que mexer no código Java do componente.

Faltou tb vc postar um exemplo prático da coisa funcionado. Achei um aqui: http://wicketstuff.org/wicket13/repeater/?wicket:bookmarkablePage=%3Aorg.apache.wicket.examples.repeater.PagingPage

A do Mentawai está aqui: http://paginator.mentaframework.org/HelloPaginator.mtw

O código HTML que vc postou é:

&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;nome&lt;/td&gt;
    &lt;td&gt;idade&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr wicket:id="lista"&gt;
    &lt;td&gt;&lt;span wicket:id="nome"&gt;foo&lt;/span&gt;&lt;/td&gt;
    &lt;td&gt;&lt;span wicket:id="idade"&gt;12&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

Como o designer vai pode mudar os links aqui? Parece que a coisa ficou engessada pra ele dentro de um componente Java.

Outra coisa: Quando falei em comparação entre Mentawai e Wicket, falei em termos de coisas básicas do server-side, ou seja, validação, internacionalização, filtros, conversão, etc. Essas coisas são básicas e recorrentes de todo projeto web, seja ele com um framework action-based, seja ele com um framework component-based. Comparar componentes do Wicket com tags do Mentawai fica uma comparação imperfeita, pois como vc mesmo já falou pra mim são coisas totalmente diferentes, sendo os componentes mais extensíveis que as tags.

Sérgio, como está escrito no blog, o exemplo que utilizei é para o componente default do Wicket para paginação.

[]'s!

Olá… Estou começando a estudar Wickets … achei muuuuito massa a filosofia e a metodologia dele. Pretendo me aprofundar mesmo no negócio. E como foi citado anteriormente ele realmente promete muito.

Comecei a estudar lendo o livro Wicket in Action… porém alguns exemplos não funcionam por incompatibilidade com a nova versão do wicket (1.4.6) e infelizmente um método crucial para manipulação dos dados não está funcionando por exemplo …

label.setModelObject(“Teste”);

nas versões anteriores e no exemplo do livro esse método funciona e existe … mas atualmente não existe mais …deve ter sido substituido por outra coisa. Alguém poderia me dizer qual é o novo método equivalente da versão atual do wicket?

Se alguém estiver disposto a montar um grupo de estudo ou pesquisa de Wickets podem me chamar… minha meta é colocar o Wicket pra frente aí … rivalizar com o JSF. hehehehehehhehe

[]'s

O Wicket é D+
A um ano estou usando wicket e essas são minhas impressões. Não descarto q algumas dessas más impressões se devam ao mal entendimento ou uso do framework por parte dos responsáveis pela arquitetura.

Um framework que se propõe à construção de aplicações web no paradigma event based e não no paradigma request / response: eis aí um desafio. Como um amigo bem lembrou, isso lembra os esforços q a microsoft fez para q os programadores Visual Basic conseguissem programar para a web - pergunta pro google o que é Code-behind.

Código java na IHM Web e requesitos de usabilidade tornam as IHMs os componentes mais complexos das aplicações atuamente desenvolvidas levando o desenvolvimento das telas a inumeráveis ciclos de codificação, deploy e teste. Resultado: baixa produtividade.

Os skills indispensáveis para um bom desenvolverdor de IHM Web não inclui java (ser fera em Java) mas com wicket isso é exigido. Resultado: requer profissionais de um perfil raríssimo, além do que, o mindset para trabalhar numa coisa conflita com aquele necessário para fazer a outra.

A estrutura dos componentes HTML refletidas no código java bem como manipulação destes também no código java (alto ACOPLAMENTO). Internacionalização, logica de apresentação, lógica de navegação no código java do componente (baixa COESÃO).

Pergunta: Dá pra contornar alguns desses problemas com wicket? Resposta: Sim, de diversas maneiras. Na minha visão, a mais eficiente delas é, simplemente, não usar Wicket.

adorei ver o nome do wicket sendo mencionado aqui!!! este projeto já vinga faz tempo, lá na globo tem projeto implementado com ele!!

pra quem nao sabe ou ainda nao leu, esse é o projeto de alguns caras da sun que sairam de lá e putos com toda parafernalha criaram este rapaz! e ele ascende dentro da comunidade gringa… quero ver aqui!!! olho no rapaz, que ele promete (mesmo o tapestry seguindo uma linha parecida, as nunces do wicket me deixam excitado com tudo isso)

[]s

Escrevi um post sobre Wicket onde a intenção é apresentar conceitos através de um esquema de login.

http://www.seufagner.com

:slight_smile: