<?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>Zona J &#187; jsf</title>
	<atom:link href="http://www.zonaj.org/category/jsf/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zonaj.org</link>
	<description>Zona Java - Um blog português sobre java.</description>
	<lastBuildDate>Wed, 26 May 2010 17:23:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como garantir Qualidade de Software?</title>
		<link>http://www.zonaj.org/2008/09/28/como-garantir-qualidade-de-software/</link>
		<comments>http://www.zonaj.org/2008/09/28/como-garantir-qualidade-de-software/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 09:42:05 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[evento]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[futurismo]]></category>
		<category><![CDATA[geral]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[qualidade]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=145</guid>
		<description><![CDATA[Definir qualidade de software é difícil pois são muitos os factores que influenciam os resultados.
Mais do que ser uma lista extensiva de soluções, este post tem como objectivo identificar a maioria dos pontos &#8211; são, aliás, perfeitamente lógicos e conhecidos &#8211; que têm de ser testados e validados, e apontar a direcção e algumas ferramentas.
É [...]]]></description>
			<content:encoded><![CDATA[<p>Definir qualidade de software é difícil pois são muitos os factores que influenciam os resultados.<br />
Mais do que ser uma lista extensiva de soluções, este post tem como objectivo identificar a maioria dos pontos &#8211; são, aliás, perfeitamente lógicos e conhecidos &#8211; que têm de ser testados e validados, e apontar a direcção e algumas ferramentas.<br />
É uma visão na perspectiva de QA (<em>Quality Assurance</em>), mais especificamente de testes. Posso dividir estes factores em dois grupos:</p>
<ul>
<li><strong>Organizacionais ou processuais</strong></li>
<p>Englobam o tipo de gestão de projecto, metodologia de desenvolvimento da equipa, qualidade e processo de recolha de requisitos.</p>
<li><strong>Técnicos</strong></li>
<p>Os artefactos de código e semelhantes produzidos pelos developers e os processos levados a cabo por testers.
</ul>
<p>Este post foca-se primordialmente nos factores técnicos, que passo a enumerar.</p>
<h3>Correcção do código produzido</h3>
<p>É importantíssima a exigência que cada programador coloca em si próprio para escrever código de qualidade: primeiramente, código o mais correcto possível.<br />
No entanto, não basta tentar escrever código correcto, é também necessário pensar nas implicações de performance do que se escreve (por exemplo, fazer um select completo a uma tabela grande sem necessidade), de thread safety, de segurança (caso mais comum, SQL injection para o qual PreparedStatements são uma grande ajuda), de documentação (comentários relevantes) e de estética do próprio código (definir e seguir convenções).</p>
<p>Este ponto depende também da própria qualidade das pessoas na equipa e a diferença além de se pagar nota-se!</p>
<h3>Testes Unitários</h3>
<p>Escrever testes unitários é a forma mais directa que a equipa tem de garantir correcção do código.<br />
Em TDD (<em>Test Driven Development</em>) o teste unitário é a unidade básica e o código é desenvolvido para satisfazer cada teste. Esta aproximação é altamente eficaz mas exige disciplina e considero que é difícil de ser usada pela maioria das equipas, especialmente portuguesas.<br />
No entanto, mesmo em ambientes não TDD este tipo de testes são essenciais, não só para garantir que o código está correcto, como para verificar que não se quebra código anterior cada vez que se alteram ou adicionam funcionalidades.<br />
Quanto maior for a percentagem de caminhos possíveis de código coberta por testes unitários &#8211; o chamado <em>code coverage</em> &#8211; maior é a indicação de garantia de qualidade do código como um todo.</p>
<p>Ferramentas:<br />
<a href="http://www.junit.org/">JUnit</a>, <a href="http://testng.org">TestNG</a>, <a href="http://dbunit.sourceforge.net/">DbUnit</a>, <a href="http://jakarta.apache.org/cactus/">Cactus</a>, <a href="http://www.atlassian.com/software/clover/">Atlassian Clover</a> (<em>code coverage</em>)</p>
<h3><em>Code Reviews</em></h3>
<p>Ainda dentro dos mecanismos de controle que a própria equipa pode usar durante o desenvolvimente encontram-se os <em>code reviews</em>.<br />
Devíamos existir sempre <em>code reviews</em>, embora seja aceitável que não tenhamos 100% do código revisto, apenas uma boa percentagem. E esta boa percentagem é um equilíbrio entre o esforço que a equipa tem a rever e a melhoria de qualidade percebida.<br />
Ter este tipo de controle cria um tipo de <em>peer pressure</em> na equipa. Ninguém é dono do seu pedaço de código, todos sabem que os outros colegas vão validar o que escrevem por isso vão ter um cuidado extra no que produzem.<br />
Desta forma más práticas e erros são detectados cedo no processo e toda a equipa ganha pois todos os membros da equipa aprendem com as correcções que lhes são feitas, especialmente os membros menos experientes que têm neste processo um <em>mentoring</em> por parte de toda a equipa.</p>
<p>Ferramentas:<br />
<a href="http://www.atlassian.com/software/crucible/">Atlassian Crucible</a></p>
<h3>Análise Estática</h3>
<p>Ferramentas de análise estática permitem detectar no erros e standards no código de forma simples. Alguns erros detectados por estas ferramentas poucos ou nenhums programadores conseguem detectar e não são apanhados na grande maioria dos outros testes por isso são uma grande adição.</p>
<p>Ferramentas:<br />
<a href="http://findbugs.sourceforge.net/">FindBugs</a> (obrigatório!), <a href="http://checkstyle.sourceforge.net/">Checkstyle</a></p>
<h3>Sistema de builds / integração contínua</h3>
<p>Builds automatizados é obrigatório! Muitos são os projectos hoje em dia em que cada developer tem o seu próprio processo de build separado no seu IDE.<br />
Seguindo a regra de ouro de que quanto mais cedo se detecta um erro melhor, o processo de builds pode e deve ser escalonado num motor de integração contínua que permite rapidamente detectar quando um membro da equipa quebra o build.<br />
Igualmente importante é adicionar ao processo de build meios adicionais de controlo de qualidade na forma de plugins ou tasks extra &#8211; correr testes unitários, gerar relatórios de code coverage, correr ferramentas de análise estática de código, etc.</p>
<p>Ferramentas:<br />
<a href="http://ant.apache.org/">Ant</a>, <a href="http://maven.apache.org/">Maven</a>, <a href="http://ant.apache.org/ivy/">Ivy</a>, <a href="http://cruisecontrol.sourceforge.net/">Cuise Control</a>, <a href="https://hudson.dev.java.net/">Hudson</a>, <a href="http://www.jetbrains.com/teamcity/">TeamCity</a>, <a href="http://www.atlassian.com/software/bamboo/">Atlassian Bamboo</a></p>
<h3>Equipa de testes / QA</h3>
<p>Este ponto não é técnico mas considero-o importante. Em todos os projectos que trabalhei em Portugal apenas uma vez trabalhei uma equipa de QA (<em>Quality Assurance</em>) organizada. Na maioria dos projectos os testes de &#8220;qualidade&#8221; resumiam-se a fazer deploy da aplicação para outro ambiente e ter alguém &#8211; muitas vezes da parte do cliente &#8211; testar ad-hoc a aplicação. E quem fazia estes testes era muitas vezes o interessado em passar a aplicação a produção &#8211; muitas vezes o próprio project manager da equipa.<br />
É muito importante ter uma equipa, ou mesmo apenas uma pessoa, de QA que tem responsabilidades de testes em determinadas fazes. É ainda mais importante que esses membros não façam parte da equipa de desenvolvimento, pois estariam com &#8220;maus hábitos&#8221;, nem da gestão de projectos, pois vai querer é satisfazer o cliente, nem do cliente, que simplesmente não vai testar devidamente e depois a culpa é da equipa. Grande parte dos projectos têm baixa qualidade porque o desenvolvimento para clientes envolve os tais &#8220;compromissos&#8221; entre qualidade e tempo/dinheiro que os PMs tanto falam.</p>
<h3>Testes funcionais</h3>
<p>Quer se tenha um processo de desenvolvimento em cascata ou iterativo, depois de cada release deve-se passar à fase de QA em que os testes funcionais são executados.<br />
Estes testes devem ser feitos com base num plano de testes já elaborado ou nos próprios requisitos do projecto &#8211; sejam eles use cases, user stories ou outra coisa qualquer.<br />
Nestes testes o carácter específico de um membro QA entram em cena: o espírito inquisitivo e a capacidade de interpretarem os requisitos do ponto de vista do utilizador.</p>
<h3>Testes de carga</h3>
<p>Num modelo de desenvolvimento iterativo os testes de carga não precisam de ser feitos no fim de cada iteração mas apenas em releases major.<br />
Duas perspectivas devem ser testadas: performance e escalabilidade.<br />
Algumas ferramentas podem ser usadas para testas as duas perspectivas &#8211; por exemplo, a aplicação que testa o tempo de invocação de algo pode lançar x threads para testar como escala.<br />
Para testar devidamente escalabilidade, devem ser tida em conta a infraestrutura do projecto. Não é necessário replicar um ambiente de produção, é aliás impossível a maioria das vezes devido aos custos, mas se em produção temos uma base de dados numa máquina e um aplication server noutra, vamos deixá-los separados também para testes para ter em conta todas as variáveis.</p>
<p>Ferramentas:<br />
<a href="http://www.webload.org/">WebLoad</a>, <a href="http://jakarta.apache.org/jmeter/">JMeter</a>, <a href="http://grinder.sourceforge.net/">Grinder</a></p>
<h3>Testes de segurança</h3>
<p>Uma das áreas menos testadas no desenvolvimento de aplicações web é a segurança, normalmente até acontecer algo de mau. Mesmo a maioria dos testers não sabem fazer testes de segurança nem o que é uma ataque de <em>Cross-Site Scripting</em> (XSS). E mesmo a maioria dos developers não têm grandes cuidados com segurança além dos típicos ataques de <em>SQL Injection</em>.<br />
A falta de ferramentas é um dos grandes problemas nesta área.</p>
<p>Ferramentas:<br />
<a href="http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project">WebScarab</a></p>
<h3>Testes de UI</h3>
<p>O teste mais básico de UI é ver se as coisas fazer <em>rendering</em> correcto nos diferentes browsers. Validar automaticamente o código gerado de acordo com standards é também importante.<br />
Para facilitar o trabalho, existem diversos projectos de automatização de testes de UI.</p>
<p>Ferramentas:<br />
<a href="http://selenium.openqa.org/">Selenium</a>, <a href="http://wtr.rubyforge.org/">Watir</a>, <a href="http://www.getwindmill.com/">Windmill</a> </p>
<p>Outros testes importantes são os de integração e de regressão mas não são áreas em que tenha muita experiência ou opinião formada por isso abstenho-me. </p>
<p>Todos estes pontos são bastante lógicos, penso eu. Tudo o que se possa fazer para aumentar a qualidade final do que se desenvolve é positivo e a qualidade deve estar na mente de todos e não ser uma moeda de troca, razão da mediocridade de grande parte das aplicações feitas para clientes que vi na minha vida profissional.<br />
Qualidade custa também dinheiro, sim, mas o retorno é grande, tenho a certeza.</p>
<p><strong>Update</strong>:<br />
A proposito de um comentário do <a href="http://www.mouseoverstudio.com/blog/">Diego Carrion</a>, fica uma referência para o <a href="http://jbehave.org/">JBehaviour2</a>, para testes funcionais numa aproximação BDD (<em>Behaviour-Driven Development</em>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2008/09/28/como-garantir-qualidade-de-software/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Forms com poucos Enters</title>
		<link>http://www.zonaj.org/2007/05/04/forms-com-poucos-enters/</link>
		<comments>http://www.zonaj.org/2007/05/04/forms-com-poucos-enters/#comments</comments>
		<pubDate>Fri, 04 May 2007 20:27:37 +0000</pubDate>
		<dc:creator>Bruno Braz Gonçalves</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jsf]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=31</guid>
		<description><![CDATA[
Num projecto em JSF implementar o seguinte requisito : o formulário só deve ser submetido ao escolher umas das acções (botões/links) disponíveis..



Isto é o contrário de: se um campo de texto estiver seleccionado o formulário é submetido se carregarmos a tecla enter. Isto acontece para campos com a tag input; não acontece por exemplo para [...]]]></description>
			<content:encoded><![CDATA[<p>
Num projecto em JSF implementar o seguinte requisito : <em>o formulário só deve ser submetido ao escolher umas das acções (botões/links) disponíveis.</code></em>.
</p>
</p>
<p>
Isto é o contrário de: se um campo de texto estiver seleccionado o formulário é submetido se carregarmos a tecla <code>enter</code>. <br />Isto acontece para campos com a tag <code>input</code>; não acontece por exemplo para a <code>textarea</code>.
</p>
<p>
Um requisito óbvio (<em>usabilidade</em>) é que o site continue a ser navegável com teclas. Logo, <code>inputs</code> do tipo <code>submit</code> e <code>button</code>, bem como todas as outras <code>tags</code>, deveriam continuar a processar o <code>enter</code>.
</p>
<p>
Eis a solução final, testada em FF2 e IE6:
</p>
<pre class="prettyprint" id="html">
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;This form doesn't submit with Enter key&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;form id="formID" .../&gt;
       ...
    &lt;/form&gt;

    &lt;script type="text/javascript"&gt;&lt;!--

/* Checks if enter key was pressed and this is allowed.
 * This functions tries to solve issue : "If a text field has focus, the
 * form will submit upon hitting the enter (or return) key."
 * @param e the event
 * @return true if enter key is pressed for input fields (input tags not of
 * type 'button' or 'submit') ; false otrhewise
 */
function disableEnterKeyForInputs(e){

  // next lines suport multibrowser
  var key = (window.event) ? event.keyCode : e.which;
  var srcElement = (window.event) ? event.srcElement : e.target;

  if (key == 13) {
    var tagName = srcElement.tagName.toUpperCase();
    if ( tagName == 'INPUT' ) {
       // only inputTags have enter issue
       // and buttons and submit should respond to enter
       switch ( srcElement.type.toUpperCase() ){
         case 'BUTTON' :
         case 'SUBMIT' :
            return true;
          break;
         default :
            return false;
       }
    }
  }
  return true;
}

if ( (theForm = document.getElementById("formID") ) != null)
  theForm.onkeypress=disableEnterKeyForInputs;

// --&gt;
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>
<em>tanx to Ricardo Antunes, Lurdes Spínola</em>
</p>
<p><b>Leituras</b></p>
<ul>
<li>[1] Nabble Forums : Form Submit On Enter (<a target="_blank" href="http://www.nabble.com/Form-Submit-On-Enter-t1320364.html">http://www.nabble.com/Form-Submit-On-Enter-t1320364.html</a>)
  </li>
<li>[2] http://www.jsftutorials.net/defaultActionTag.html (<a target="_blank" href="http://www.jsftutorials.net/defaultActionTag.html">http://www.jsftutorials.net/defaultActionTag.html</a>)
  </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/05/04/forms-com-poucos-enters/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mr. JSF or: How I Learned to Start Worrying and Hate the Framework</title>
		<link>http://www.zonaj.org/2007/05/04/mr-jsf-or-how-i-learned-to-start-worrying-and-hate-the-framework/</link>
		<comments>http://www.zonaj.org/2007/05/04/mr-jsf-or-how-i-learned-to-start-worrying-and-hate-the-framework/#comments</comments>
		<pubDate>Fri, 04 May 2007 15:01:47 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[facelets]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[seam]]></category>
		<category><![CDATA[tomahawk]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=30</guid>
		<description><![CDATA[Desde há cerca de 2 anos para cá, tenho trabalhado intensamente com Java Server Faces no desenvolvimento web em Java. Inicialmente as coisas não correram muito bem, pensou-se por a tecnologia ser ainda muito nova e ainda verde. Depois, continuaram a não correr bem. No futuro, espero que não corram.
Cheguei à conclusão que JSF não [...]]]></description>
			<content:encoded><![CDATA[<p>Desde há cerca de 2 anos para cá, tenho trabalhado intensamente com <a href="http://en.wikipedia.org/wiki/JavaServer_Faces">Java Server Faces</a> no desenvolvimento web em Java. Inicialmente as coisas não correram muito bem, pensou-se por a tecnologia ser ainda muito nova e ainda verde. Depois, continuaram a não correr bem. No futuro, espero que não corram.<br />
Cheguei à conclusão que JSF não é a melhor solução para desenvolvimento web em Java e consegui reunir umas quantas razões minhas:</p>
<ul>
<li><strong>JSF é uma especificação</strong></li>
</ul>
<p>JSF é uma especificação e existem diversas implementações, sendo que a Sun fornece uma <em><a href="https://javaserverfaces.dev.java.net/servlets/ProjectDocumentList?folderID=5420&#038;expandFolder=5420&#038;folderID=5420">Reference Implementation</a></em>. Por um lado, a especificação deixa pequenos detalhes de implementação à escolha dos implementadores e por outro, existem algumas falhas de desenho na especificação, assumidos inclusivamente por quem está a trabalhar na versão 2 do <em>draft</em> de especificação.</p>
<ul>
<li><strong>Fases</strong></li>
</ul>
<p>O processamento JSF é dividido em 6 fases e é definida a ordem e o que ocorre em cada uma delas. O programador, em muitas situações, tem de ter a noção de fase presente quando está a programar, a desenvolver as suas acções, etc. Requer um conhecimento que apenas é adquirido com experiência e muitas falhas Aliás, tanto a noção de fases como as questões de request e sessão também deveriam ser o mais transparentes possíveis para quem desenvolve, deixando o programador dedicar-se a desenhar o interface e adicionar comportamento aos elementos do interface, como se fosse uma simples aplicação.</p>
<ul>
<li><strong>Bugs</strong></li>
</ul>
<p>Historicamente, foram detectados alguns bugs graves nas implementações de JSF. Um dos exemplos é o do JSF gerar identificadores que já existiam declarados pelo utilizador na página, se foi resolvido passado meses.</p>
<ul>
<li><strong>Identificadores Únicos</strong></li>
</ul>
<p>Temos de ter cuidado com identificadores duplicados e acaba-se por ter de se definir o <em>id</em> de cada componente da página. Obtemos um erro quando tentamos consultar a página e a origem do mesmo é não raras vezes difícil de depurar.</p>
<ul>
<li><strong>Renderkit</strong></li>
</ul>
<p>Renderkits são um esquema falhado, no que toca a desenvolver para web. Em casos reais é quase impossível fazer output para múltiplos outputs sem alterar o conteúdo do jsf. Além disso, a geração de html está escondida dentro do renderkit e é difícil de controlar. </p>
<ul>
<li><strong>Web Semântica e Acessibilidade</strong></li>
</ul>
<p>É muito difícil controlar o código que é gerado pelo JSF .<br />
No mundo actual, quer-se <em>markup</em> semanticamente correcto, separação entre informação semântica (XHTML) e apresentação gráfica (CSS) e acessibilidade para utilizadores com necessidades especiais. Deve ser possível ter um controlo fino sobre o markup gerado. As interacções com os designers (mesmo com o meu post anterior não nos safamos) tornam-se mais complexas pois o programador não consegue replicar o código criado pelo designer.</p>
<ul>
<li><strong>Manutenção de estado</strong></li>
</ul>
<p>Para manter o estado entre requests, o JSF fornece apenas a noção de sessão. Componentes como o <a href="http://myfaces.apache.org/tomahawk/uiSaveState.html">SaveState</a> do <a href="http://myfaces.apache.org/tomahawk/index.html">Tomahawk</a> ou novas frameworks facilitadoras como o <a href="http://www.jboss.com/products/seam">JBoss Seam</a> permitem ter a noção de Conversation numa aplicação JSF. Se não forem utilizados estes componentes, o programador é obrigado a usar a sessão, caindo no erro comum de definir Managed Beans como de sessão quando tal não é adequado. Ou então colocando a informação do bean em sessão e recuperando-a quando necessário, no caso de beans de sessão. Ao usarmos estes esquemas de sessão não conseguimos, por exemplo, navegar em duas páginas da mesma aplicação ao mesmo tempo.</p>
<ul>
<li><strong>ValueChangeListeners</strong></li>
</ul>
<p>Os eventos são processados mesmo quando não é esperado. Por exemplo, se tivermos uma dropdown com um ValueChangeListener e um valueBinding para uma nossa String, se submetermos a página sem alterar a dropdown, o evento será lançado porque o valor anterior da variável era null e o que é submetido é o valor default. Além disso, quando temos dropdowns com immediate=”true” e fazemos alterações no ValueChangeListeners, temos de saltar para fase de RenderResponse para que não tenhamos os dados reescritos. Duas palavras: mau desenho.</p>
<p>Estas são razões que chegue para não usar JSF. O que acontece em muitos casos, é usarem-se frameworks que tornem a tecnologia suportável, como sejam os componentes <a href="http://myfaces.apache.org/tomahawk/index.html">Tomahawk</a> ou as frameworks <a href="https://facelets.dev.java.net/">Facelets</a> e <a href="http://www.jboss.com/products/seam">JBoss Seam</a>.<br />
Quando finalmente se chega à conclusão que existem outras frameworks que são melhores que JSF, encontramos coisas como o Tapestry ou o Wicket. Estas duas frameworks permitem-nos definir o interface com markup xhtml, conseguindo assim a desejada interacção com os designers e podendo, inclusivamente, fazer as nossas páginas directamente do protótipo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/05/04/mr-jsf-or-how-i-learned-to-start-worrying-and-hate-the-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSF Config Metadata: &#039;atribute&#039; e &#039;property&#039;</title>
		<link>http://www.zonaj.org/2007/04/04/jsf-config-metadata-atribute-e-property/</link>
		<comments>http://www.zonaj.org/2007/04/04/jsf-config-metadata-atribute-e-property/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 11:21:43 +0000</pubDate>
		<dc:creator>Bruno Braz Gonçalves</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></category>

		<guid isPermaLink="false">http://d6038509.u101.jodoshared.com/?p=15</guid>
		<description><![CDATA[
A framework Java Server Faces (JSF) &#233; configurada com um ou mais ficheiros &#39;faces-config.xml&#39;. Al&#233;m de v&#225;rias tags para configura&#231;&#227;o do runtime, a especifica&#231;&#227;o prop&#245;e a utiliza&#231;&#227;o de metatags informativas que possibilitam ajuda ao desenvolvimento.


Tags para metadata em ficheiros xml de configura&#231;&#227;o s&#227;o usuais, como por exemplo &#60;description&#62; ou &#60;display-name&#62;.
Novo para mim foram as tags&#60;attribute&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>
A framework Java Server Faces (JSF) &eacute; configurada com um ou mais ficheiros &#39;<code>faces-config.xml</code>&#39;. Al&eacute;m de v&aacute;rias tags para configura&ccedil;&atilde;o do runtime, a especifica&ccedil;&atilde;o prop&otilde;e a utiliza&ccedil;&atilde;o de metatags informativas que possibilitam ajuda ao desenvolvimento.
</p>
<p>
Tags para metadata em ficheiros xml de configura&ccedil;&atilde;o s&atilde;o usuais, como por exemplo <code>&lt;description&gt;</code> ou <code>&lt;display-name&gt;</code>.<br />
Novo para mim foram as tags<code>&lt;attribute&gt;</code> e<code>&lt;property&gt;</code>. De [3]
</p>
<div style="margin-left: 40px;"><code>&lt;attribute&gt;</code><br />
<i>Use to describe an attribute of a custom component, converter, validator, or renderer.</i><br />
<code>&lt;property&gt;</code><br />
<i>Use to describe a property of a custom component, converter, or validator.</i>
</div>
<p>
Quando utilizadas em converters ou validators permite descrever as propriedades e atributos que estes possuem.<br />
Por exemplo</p>
<p style="margin-left: 40px;"><code>&lt;faces-config<br />
xmlns="http://java.sun.com/JSF/Configuration"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;...&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;validator-id&gt;myNumberValidator&lt;/validator-id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;validator-class&gt;mypackage.MyNumberValidator</code><code>&lt;/validator-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;attribute-name&gt;minNumber&lt;/attribute-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;attribute-class&gt;java.lang.Integer&lt;/attribute-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;default-value&gt;0&lt;/default-value&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&lt;suggested-value&gt;5&lt;/suggested-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;/attribute&gt;</code><code><br />
&nbsp;&nbsp;&nbsp; &lt;/validator&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;...&gt;<br />
&lt;/faces-config&gt;</code></p>
<p>Isto permite ao <a href="http://pt.wikipedia.org/wiki/Ambiente_de_Desenvolvimento_Integrado">IDE</a> ajudar o programador pois ao escrever</p>
<pre class="prettyprint">
&lt;h:inputText id="fieldValue_id"
             value="#{managedBean.fieldValue}"&gt;
  &lt;f:validator validatorId="myNumberValidator"/&gt;
&lt;/h:inputText&gt;
</pre>
<p>poder&aacute; sugerir</p>
<pre class="prettyprint">
&lt;h:inputText id="fieldValue_id"
             value="#{managedBean.fieldValue}"&gt;
  &lt;f:validator validatorId="myNumberValidator"/&gt;
  &lt;f:attribute name="minNumber/&gt;
&lt;/h:inputText&gt;
</pre>
<p>e ainda</p>
<pre class="prettyprint">
&lt;h:inputText id="fieldValue_id"
             value="#{managedBean.fieldValue}"&gt;
  &lt;f:validator validatorId="myNumberValidator"/&gt;
  &lt;f:attribute name="minNumber" value="5"/&gt;
&lt;/h:inputText&gt;
</pre>
<p>Neste momento ando a utilizar o Oracle JDeveloper 10.1.3 que tem algumas funcionalidades para JSF mas não esta.</p>
<p>&nbsp;</p>
<p><b>Leituras</b>
</p>
<ul>
<li>[1] JSF for nonbelievers: JSF conversion and validation (<a target="_blank" href="http://www-128.ibm.com/developerworks/java/library/j-jsf3/">http://www-128.ibm.com/developerworks/java/library/j-jsf3/</a>)
  </li>
<li>[2] Oracle JDeveloper 10g (10.1.3) Documentation (<a target="_blank" href="http://www.oracle.com/webapps/online-help/jdeveloper/10.1.3/">http://www.oracle.com/webapps/online-help/jdeveloper/10.1.3/</a>)
  </li>
<li>[3] Faces-Config DTD (<a target="_blank" href="http://www.horstmann.com/corejsf/faces-config.html#faces-config">http://www.horstmann.com/corejsf/faces-config.html#faces-config</a>)
  </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/04/04/jsf-config-metadata-atribute-e-property/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
