<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Raphael Monroe.com &#187; Wicket</title>
	<atom:link href="http://www.raphaelmonroe.com/category/tutoriais/wicket/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.raphaelmonroe.com</link>
	<description>Blog de novidades em tecnologia, web, games e muito mais!</description>
	<lastBuildDate>Thu, 22 Apr 2010 11:20:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como criar repeating views no Wicket</title>
		<link>http://www.raphaelmonroe.com/tutoriais/como-criar-repeating-views-no-wicket/</link>
		<comments>http://www.raphaelmonroe.com/tutoriais/como-criar-repeating-views-no-wicket/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 17:41:14 +0000</pubDate>
		<dc:creator>Raphael Monroe</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Wicket]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[dataview]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[tabelas]]></category>

		<guid isPermaLink="false">http://www.raphaelmonroe.com/?p=1098</guid>
		<description><![CDATA[Muitas vezes desejamos criar uma tabela/lista para melhor visualizarmos informações relevantes para nosso negócio. Seja via banco de dados, seja via listas criadas dinamicamente, podemos construir facilmente essas tabelas utilizando o Wicket.

Portanto, nosso artigo de hoje mostrará como uma tarefa relativamente custosa em alguns frameworks, se torna de fácil execução ao desenvolvermos com o Wicket.]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes desejamos criar uma tabela/lista para melhor visualizarmos informações relevantes para nosso negócio. Seja via <a href="http://www.raphaelmonroe.com/tag/banco-de-dados/">banco de dados</a>, seja via listas criadas dinamicamente, podemos construir facilmente essas tabelas utilizando o <a href="http://www.raphaelmonroe.com/category/tutoriais/wicket/">Wicket</a>.</p>
<p>Portanto, nosso artigo de hoje mostrará como uma tarefa relativamente custosa em alguns <a href="http://www.raphaelmonroe.com/tag/framework">frameworks</a>, se torna de fácil execução ao desenvolvermos com o Wicket.</p>
<p><span id="more-1098"></span></p>
<p>Imaginemos então, a simples situação:</p>
<p><strong>Uma empresa possui uma base de dados na qual grava informações a respeito de seus clientes. Há a necessidade de criar uma interface web para listagem de todos os clientes da base.</strong></p>
<p>Para isso, consideramos a classe Cliente, como segue:</p>
<p><strong>Client.java</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Client <span style="color: #000000; font-weight: bold;">implements</span> <span style="color: #003399;">Serializable</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> name<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> gender<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> age<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Client<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name, <span style="color: #003399;">String</span> gender, <span style="color: #000066; font-weight: bold;">int</span> age<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">name</span> <span style="color: #339933;">=</span> name<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">gender</span> <span style="color: #339933;">=</span> gender<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">age</span> <span style="color: #339933;">=</span> age<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>  
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getAge<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> age<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setAge<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> age<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">age</span> <span style="color: #339933;">=</span> age<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getGender<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> gender<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setGender<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> gender<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">gender</span> <span style="color: #339933;">=</span> gender<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> name<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setName<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">name</span> <span style="color: #339933;">=</span> name<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>A lógica de execução do nosso &#8220;aplicativo&#8221; estará dentro do nosso index, como segue:</p>
<p><strong>Jindex.java</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">class</span> JIndex <span style="color: #000000; font-weight: bold;">extends</span> WebPage <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> List<span style="color: #339933;">&lt;</span>Client<span style="color: #339933;">&gt;</span> clients<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> JIndex<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">super</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        clients <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>Client<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        loadClients<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        fillTable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Responsável por preencher uma lista de objetos Cliente.
     * Normalmente, essa lista é formada por objetos do BD. No nosso exemplo,
     * preencheremos livremente.
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> loadClients<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//Adicionando 4 clientes à lista...</span>
        clients.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Client<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Raphael&quot;</span>, <span style="color: #0000ff;">&quot;male&quot;</span>, <span style="color: #cc66cc;">23</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        clients.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Client<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Adriana&quot;</span>, <span style="color: #0000ff;">&quot;female&quot;</span>, <span style="color: #cc66cc;">23</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        clients.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Client<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Romualdo&quot;</span>, <span style="color: #0000ff;">&quot;male&quot;</span>, <span style="color: #cc66cc;">42</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        clients.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Client<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Josefina&quot;</span>, <span style="color: #0000ff;">&quot;female&quot;</span>, <span style="color: #cc66cc;">37</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Responsável por criar o dataview utilizando elementos de uma lista.
     * No caso a lista antes preenchida &quot;clients&quot;.
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> fillTable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//Cria um dataview com id &quot;clientsList&quot;, recebendo os elementos de clients...</span>
        DataView dataview <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DataView<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;clientsList&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> ListDataProvider<span style="color: #009900;">&#40;</span>clients<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
            @Override
            <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> populateItem<span style="color: #009900;">&#40;</span>Item item<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">//Objeto client que será representado por cada linha...</span>
                Client client <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Client<span style="color: #009900;">&#41;</span> item.<span style="color: #006633;">getModelObject</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #666666; font-style: italic;">//Insere na linha o nome do cliente...</span>
                item.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Label</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;clientName&quot;</span>, client.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #666666; font-style: italic;">//Insere na linha o sexo do cliente...</span>
                item.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Label</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;clientGender&quot;</span>, client.<span style="color: #006633;">getGender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #666666; font-style: italic;">//Insere na linha a idade do cliente...</span>
                item.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Label</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;clientAge&quot;</span>, <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>client.<span style="color: #006633;">getAge</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//Adiciona o dataview à webpage...</span>
        add<span style="color: #009900;">&#40;</span>dataview<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>No Wicket, quando criamos uma classe ( que herda de WebPage ), devemos criar o html correspondente. Caso ainda não saiba os conceitos principais sobre o framework, acesse o artigo &#8220;<a href="http://www.raphaelmonroe.com/tutoriais/bem-vindoa-ao-wicket-framework-java-web/">Bem-vindo(a) ao Wicket &#8211; Framework Java WEB</a>&#8220;.</p>
<p>Segue o html correspondente:</p>
<p><strong>JIndex.html</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns:wicket=&quot;http://wicket.apache.org&quot;&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;/&gt;
        &lt;title&gt;Teste Dataview&lt;/title&gt;
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;/&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;table&gt;
            &lt;tr&gt;
                &lt;th&gt;Name&lt;/th&gt;
                &lt;th&gt;Gender&lt;/th&gt;
                &lt;th&gt;Age&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr wicket:id=&quot;clientsList&quot;&gt;
                &lt;td&gt;&lt;span wicket:id=&quot;clientName&quot; /&gt;&lt;/td&gt;
                &lt;td&gt;&lt;span wicket:id=&quot;clientGender&quot; /&gt;&lt;/td&gt;
                &lt;td&gt;&lt;span wicket:id=&quot;clientAge&quot; /&gt;&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/table&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Repare nas linhas <strong>16,17,18,19</strong>. É nelas que referenciamos nossos componentes adicionados no .java. Além disso, atente-se para os tipos de tags html usados, isto é, referenciamos o dataview na tag <em>tr</em>(linha) e os Labels dentro das <em>td</em>&#8217;s (colunas) através da tag <em>span</em>.</p>
<p>Basta rodar agora a sua aplicação para conferir o resultado. Lembrando que para o <em> JIndex</em> seja chamado na execução do programa, devemos possuir o <em>Application</em> conforme segue:</p>
<p><strong>JApplication.java</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JApplication <span style="color: #000000; font-weight: bold;">extends</span> WebApplication<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">Class</span> getHomePage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> JIndex.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Não esqueça de deixar seu comentário em caso de dúvida!</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.raphaelmonroe.com/tutoriais/como-criar-repeating-views-no-wicket/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Bem-vindo(a) ao Wicket: Framework JAVA Web.</title>
		<link>http://www.raphaelmonroe.com/tutoriais/bem-vindoa-ao-wicket-framework-java-web/</link>
		<comments>http://www.raphaelmonroe.com/tutoriais/bem-vindoa-ao-wicket-framework-java-web/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 22:08:19 +0000</pubDate>
		<dc:creator>Raphael Monroe</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Wicket]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.raphaelmonroe.com/?p=440</guid>
		<description><![CDATA[Inicio aqui, uma série de tutoriais sobre o Wicket, este maravilhoso framework com o qual venho tendo enorme prazer em trabalhar. Fornecendo incríveis facilidades para o desenvolvimento Web em JAVA, o Wicket vem se tornando um dos melhores da categoria.
Minha idéia é seguir a linha de raciocínio que utilizei durante a minha aprendizagem. Entretanto, isso [...]]]></description>
			<content:encoded><![CDATA[<p>Inicio aqui, uma série de <a href="http://www.raphaelmonroe.com/tag/tutorial/">tutoriais</a> sobre o <a href="http://wicket.apache.org/">Wicket</a>, este maravilhoso framework com o qual venho tendo enorme prazer em trabalhar. Fornecendo incríveis facilidades para o desenvolvimento Web em JAVA, o Wicket vem se tornando um dos melhores da categoria.</p>
<p>Minha idéia é seguir a linha de raciocínio que utilizei durante a minha aprendizagem. Entretanto, isso não significa que sou um expert, intocável e mestre Wicket. Ainda estudo e aprendo dia após dia. Portanto, ao constatarem erros, fiquem à vontade para comentar sobre eles. Assim, juntos buscaremos sempre as melhores soluções.</p>
<p><span id="more-440"></span></p>
<p><a href="http://www.raphaelmonroe.com/tutoriais/bem-vindoa-ao-wicket-framework-java-web/attachment/apache-wicket/" rel="attachment wp-att-513"><img src="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/apache-wicket.png" alt="apache-wicket" title="apache-wicket" width="590" height="70" class="alignleft size-full wp-image-513" style="border:1px solid #ccc;" /></a></p>
<p>A motivação inicial pra a série de tutoriais foi a falta de documentação, pois o Wicket é relativamente novo e, portanto, ainda carece de tutoriais, exemplos e discussões. Espero, com os artigos, difundir um pouco mais as informações sobre o <a href="http://www.raphaelmonroe.com/tag/framework/">framework</a> porque <cia do pagode> &#8220;tudo que é bonito é pra se mostrar&#8221; </cia do pagode>.</p>
<p>Pois bem, antes de fazermos uma breve introdução sobre o Wicket, gostaria de citar as referências mais utilizadas por desenvolvedores que utilizam o framework atualmente.</p>
<p><img src="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/wicket-reference.png" alt="wicket-reference" title="wicket-reference" width="590" height="70" class="alignleft size-full wp-image-498" style="border:1px solid #ccc;"/></p>
<p><strong><a href="http://wicket.apache.org/">Apache Wicket</a></strong>: Site oficial do projeto. Apresenta introdução, documentação sobre alguns componentes e exemplos de utilização.</p>
<p><strong><a href="http://cwiki.apache.org/WICKET/reference-library.html">Reference Library</a></strong>: Pertence ao site oficial. Explica como fazer várias coisas com o Wicket. Uma boa pedida para os iniciantes. Vale a pena conferir.</p>
<p><strong><a href="http://wicketinaction.com/">Wicket in Action</a></strong>: Ótimo livro para quem deseja inicar os estudos. Apresenta uma boa didática. com vários exemplos. O autor vai, durante o livro, construindo um aplicativo para venda de queijos online. Com este exemplo, os leitores aprendem fácil e rapidamente os conceitos importantes do framework.</p>
<p><strong><a href="http://wicketstuff.org/confluence/display/STUFFWIKI/Wiki">Wicket Stuff</a></strong>: Possui exemplos e vários projetos relacionados ao Wicket. Podemos encontrar alguns bons componentes para utilizarmos em conjunto com o framework.</p>
<p><a href="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/introduction-wicket.png"><img src="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/introduction-wicket.png" alt="introduction-wicket" title="introduction-wicket" width="590" height="70" class="alignleft size-full wp-image-500" style="border:1px solid #ccc;"/></a></p>
<p>Atualmente, existem diversos frameworks para programação <a href="http://www.raphaelmonroe.com/tag/java/">JAVA</a> Web, cada qual possuindo prós e contras. Assim, no princípio de um novo projeto, vários programadores chegam a ficar um tanto quanto preocupados no momento da escolha do melhor framework, dadas as inúmeras alternativas, conforme podemos ver na figura a seguir:</p>
<p><center><div id="attachment_459" class="wp-caption aligncenter" style="width: 578px"><a href="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/lista-frameworks.png"><img src="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/lista-frameworks.png" alt="Figura 1: Frameworks Web" title="lista-frameworks" width="568" height="307" class="size-full wp-image-459" style="border:1px solid #ccc;" /></a><p class="wp-caption-text">Figura 1: Frameworks Web</p></div></center></p>
<p>Uma possível pergunta pode surgir: &#8220;Bom Raphael, se existem tantas opções, porque escolher o <a href="http://www.raphaelmonroe.com/tag/wicket/">Wicket</a>?&#8221;</p>
<p>Peço a permissão de responder essa pergunta explicando alguns termos como <em>stateful</em>, <em>stateless</em> e também sobre clareza de código e separação coerente entre os &#8220;dois mundos&#8221;, no caso, <a href="http://www.raphaelmonroe.com/tag/html/">HTML</a> e JAVA.</p>
<p><a href="http://www.raphaelmonroe.com/tutoriais/bem-vindoa-ao-wicket-framework-java-web/attachment/statefulprogamming/" rel="attachment wp-att-514"><img src="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/statefulprogamming.png" alt="statefulprogamming" title="statefulprogamming" width="590" height="70" class="alignleft size-full wp-image-514" style="border:1px solid #ccc;"/></a></p>
<p>Creio que todos os interessados em programação já pararam pra pensar em como é fácil (leia-se menos difícil) se programar em Java, visando o desenvolvimento de aplicativos Desktop. A facilidade a que me refiro diz respeito ao controle de componentes/variáveis existentes no projeto. Podemos criar vários painéis/frames/modais sem a necessidade de controlar requisições entre elas. Isso porque, todo esse controle do estado da conexão é &#8220;automático&#8221;, ou seja, o estado da conexão é sempre mantido. Tal fato, caracteriza Statefull Programming.</p>
<p><a href="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/statelessprotocol1.png"><img src="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/statelessprotocol1.png" alt="statelessprotocol" title="statelessprotocol" width="590" height="70" class="alignleft size-full wp-image-509" style="border:1px solid #ccc;"/></a></p>
<p>Muitas vezes ao utilizarmos aplicações web, imaginamos que a programação é feita igualmente à Desktop. Ao contrário, o protocolo <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a> não fornece nenhuma facilidade &#8220;embutida&#8221; para continuar interações entre as páginas, ou seja, ele não possui nenhuma informação sobre o estado da aplicação (stateless). Tal tarefa fica a cargo do desenvolvedor. </p>
<p>A técnica comumente utilizada para controlar o estado é passar informações diretamente pela URL, por exemplo:<br />
<em><code></p>
<p>http://www.raphaelmonroe.com/index.php?page_id=3&#038;opentab=5</p>
<p></code></em><br />
O simples código acima ilustra a passagem de parâmetros visando um controle da aplicação. No caso, foi solicitada a página com ID=3 e nela, deve-se abrir a aba 5.</p>
<p>Mas como tudo apresenta falhas, passar informações pela URL possui vários questionamentos à respeito de segurança/autenticação e, nos dias de hoje, é difícil imaginar uma aplicação web, na qual todos os estados são controlados por parâmetros no endereço.</p>
<p><a href="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/jsfjavahtml.png"><img src="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/jsfjavahtml.png" alt="jsfjavahtml" title="jsfjavahtml" width="590" height="70" class="alignleft size-full wp-image-493" style="border:1px solid #ccc;"/></a><br />
Creio que quase todos os desenvolvedores JAVA Web, iniciaram seus estudos e projetos (e ainda continuam) seguindo o caminho : Servlets, JSP, JSF, Facelets, RichFaces e por ae vai. Um dos motivos que levam os desenvolvedores para essa estrada, é a quantidade de informações/documentação/exemplos existentes na web. Evidencia-se aqui, um grande problema para os desenvolvedores : a falta de conhecimento teórico.</p>
<p>Em muitos fóruns que frequento, me deparo com inúmeras dúvidas que poderiam ser respondidas com um mínimo de conhecimento teórico. Assim, desenvolvedores vêm utilizando exemplos da net para &#8220;aplicações sérias&#8221; no âmbito corporativo, sem ao menos se preocuparem com o que estão fazendo,  &#8220;remendando&#8221; e &#8220;arresorvendo na gambiarra&#8221;, literalmente. Não estou aqui crucificando frameworks e/ou programadores, só estou alertando para o fato de que &#8220;teoria é preciso&#8221;.</p>
<p>Como falei em JSF, gostaria de indicar um dos melhores posts que já vi à respeito: &#8220;<a href="http://www.rponte.com.br/2009/01/19/o-que-todo-bom-desenvolvedor-jsf-deveria-saber/">O que todo bom desenvolvedor JSF deveria saber</a>&#8221;</p>
<p>Bom, mas porque falar em clareza de código? No site oficial do Wicket, encontramos a seguinte frase à respeito do desenvolvimento em JSP, tendo em vista a presença de código JAVA + HTML :</p>
<blockquote><p>JSP is by far the worst offender, allowing the embedding of Java code directly in web pages, but to some degree almost all of the frameworks from the list (except Tapestry) above introduce some kind of special syntax to your HTML code.</p></blockquote>
<p>A evolução das empresas de TI contribui para maiores &#8220;divisões&#8221; em projetos. A idéia de Webmasters, os quais faziam design, código, etc já está ultrapassada. Hoje, encontramos designers, coders, testers, dentre outros. Aqui, evidencia-se um importante requisito: organização e clareza em todas as partes do projeto, visto que muitas empresas até mesmo terceirizam serviços de design. Portanto, quanto maior a separação entre HTML + CSS e JAVA, maior o rendimento e sucesso de um projeto.</p>
<p><a href="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/escolha-wicket.png"><img src="http://www.raphaelmonroe.com/wp-content/uploads/2009/10/escolha-wicket.png" alt="escolha-wicket" title="escolha-wicket" width="590" height="70" class="alignleft size-full wp-image-495" style="border:1px solid #ccc;"/></a></p>
<p>Ao se programar com o Wicket, você esquece que está desenvolvendo um aplicativo web. Isso porque o desenvolvedor está livre para programar em JAVA com todos os conceitos de orientação a objeto, o qual é stateful. Ou seja, você estará desenvolvendo componentes stateful para um ambiente stateless!! WTF!!!<br />
Essa é a grande &#8220;sacada&#8221; do Wicket. O controle do estado da aplicação é automático.</p>
<p>Um outro aspecto importantíssimo que me ajudou muito, é possibilidade de herança, tanto no JAVA quanto no HTML!!! Basta utilizarmos <a href="http://en.wikipedia.org/wiki/Namespace">namespaces</a> pré-definidos e compatíveis com xhtml. </p>
<p>Com o Wicket o controle é feito orientado à componentes e não à páginas. Tal fato visa facilitar os programadores desktop acostumados com o Swing e awt. Vale ressaltar também o fato de que você nunca verá &#8220;códigos lógicos&#8221; em páginas HTML, as quais apresentarão somente códigos estáticos, sendo a lógica totalmente desenvolvida em JAVA. Por exemplo, se você deseja imprimir na tela uma lista de clientes, basta o seguinte código HTML, ficando a definição do <em>dataview</em> para o código JAVA:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;table&gt;
   &lt;tr wicket:id=&quot;clientsList&quot;&gt;
      &lt;td&gt;
         &lt;span wicket:id=”client_name” /&gt;
      &lt;/td&gt;
   &lt;/tr&gt;
&lt;/table&gt;</pre></td></tr></table></div>

<p>Para terminar e não deixar o post muito extenso, uma frase que resume bem os conceitos do Wicket, retirada do site oficial:</p>
<blockquote class="blockquote"><p>Wicket is all about simplicity. There are no configuration files to learn in Wicket. Wicket is a simple class library with a consistent approach to component structure. In Wicket, your web applications will more closely resemble a Swing application than a JSP application. If you know Java (and especially if you know Swing), you already know a lot about Wicket.</p></blockquote>
<p><em>&#8220;Wicket é simplicidade. Não é necessário aprender a criar arquivos de configuração (como aqueles imensos xml&#8217;s de outros frameworks, pois com o wicket é tudo automático). Wicket é uma biblioteca que permite uma programação muito próxima á programação por componentes, pois com este framework, sua aplicação será mais parecida com uma aplicação Swing do que uma mesma JSP. Se você conhece Java (especificamente o Swing), você já possui grande conhecimento sobre o Wicket.&#8221;</em></p>
<p>Em próximos posts, iniciaremos nossos estudos através de exemplos práticos, abordando desde a configuração da IDE até a criação de suas primeiras aplicações utilizando o Wicket. </p>
<p>Até Mais,</p>
<p>[]&#8217;s </p>
]]></content:encoded>
			<wfw:commentRss>http://www.raphaelmonroe.com/tutoriais/bem-vindoa-ao-wicket-framework-java-web/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
