<?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>Marcos Sousa's Blog &#187; JSF</title>
	<atom:link href="http://www.marcossousa.com/tag/jsf/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcossousa.com</link>
	<description>Blog sobre desenvolvimento de software</description>
	<lastBuildDate>Sun, 06 Jun 2010 22:05:49 +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>FacesContext em Seam Remoting calls</title>
		<link>http://www.marcossousa.com/2009/06/27/facescontext-em-seam-remoting-calls/</link>
		<comments>http://www.marcossousa.com/2009/06/27/facescontext-em-seam-remoting-calls/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 04:56:42 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[FacesContext]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Seam Framework]]></category>
		<category><![CDATA[Seam Remoting]]></category>
		<category><![CDATA[Transactions]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=175</guid>
		<description><![CDATA[Faz um tempinho que não escrevo nada por aqui. Além de projetos críticos que estou participando, estava muito envolvido na leitura de dois livros relacionados a Agile, que os comentarei em breve, e também estou escrevendo uma série de artigos para a revista Java Magazine, o primeiro sai na edição 72. A partir de agora [...]]]></description>
			<content:encoded><![CDATA[<p>Faz um tempinho que não escrevo nada por aqui. Além de projetos críticos que estou participando, estava muito envolvido na leitura de dois livros relacionados a Agile, que os comentarei em breve, e também estou escrevendo uma série de artigos para a revista Java Magazine, o primeiro sai na edição 72. A partir de agora devo publicar pelo menos uns 2 post mensais. <img src='http://www.marcossousa.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>O <a href="http://docs.jboss.com/seam/latest/reference/en-US/html/remoting.html">Seam Remoting</a> oferece uma forma conveniente de acessar componentes backing beans via AJAX. Com uma simples anotação é possível chamar ações, intanciar objeto e etc. Porém este recurso é uma maneira limitada de acessar o contexto dos componentes e requer uma certa atenção de nós desenvolvedores. Pessoalmente, pude presenciar soluções fantásticas usando remoting e mas algumas implementações desastrosas. Fica a dica: <strong>use o remoting apenas quando os componentes AJAX existentes não solucionam um dado problema.</strong></p>
<p>Por padrão, uma requisição AJAX via <a href="http://docs.jboss.com/seam/latest/reference/en-US/html/remoting.html">Seam Remoting </a>não possui controle de transações e o contexto JSF não é criado. Para ambos os casos é possível habilitá-los. O controle de transações é mais simples, basta adicionar a anotação @Transactional com o tipo <strong>REQUIRED</strong>. Veja o exemplo:</p>
<pre class="brush: java;">@WebRemote @Transactional(TransactionPropagationType.REQUIRED)
public void updateUserProfile(Profile profile) {
entityManager.merge(profile);
}</pre>
<p>Criar o contexto JSF exige algo um pouco mais avançado. Antes de iniciar a execução das ações, o contexto JSF deve ser criado, e para a sua criação é preciso o <strong>HttpServletRequest</strong> e o <strong>HttpServletResponse</strong>. Uma forma seria criando um filtro, mas acredito que não é uma boa solução. O Seam possui um recurso de ExecutionHandler que permite executar determinadas operações em requisições Remoting antes executar a ação. Este recurso usa o padrão <a href="http://www.google.com.br/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FObserver_pattern&amp;ei=hqVFSt_nAdSLtgf-m9S3Ag&amp;usg=AFQjCNGRWwxlv75N0vj4Ifwc0q4NnXIbrg&amp;sig2=gNBtStw_hbSmpwARjfBWSQ">Observer</a>, onde o primeiro passo é criar o observer, ele precisa de implementar a interface ExecutionHandler:</p>
<pre class="brush: java;">public class RemotingFacesContextHandler extends ExecutionHandler {

private ServletContext servletContext;

protected FacesContext getFacesContext(HttpServletRequest request,
HttpServletResponse response) {

FacesContext facesContext = FacesContext.getCurrentInstance();

if (facesContext == null) {
FacesContextFactory contextFactory = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
facesContext = contextFactory.getFacesContext(servletContext,request, response, lifecycle);
}

return facesContext;
}
@Override
public void handle(HttpServletRequest request, HttpServletResponse response)
throws Exception {
getFacesContext(request, response);
super.handle(request, response);
}
@Override
public void setServletContext(ServletContext ctx) {
this.servletContext = ctx;
super.setServletContext(ctx);
}
}</pre>
<p>O método <strong>handle</strong> chama o método <strong>getFacesContext</strong> que é responsável por iniciar o contexto. A inicialização do FacesContext é feita por meio do método <strong>getFacesContext</strong> da classe FacesContextFactory. Além do contexto servlet, do request e do response, é necessário informar o ciclo de vida JSF.O Ciclo de vida é criado por meio da classe LifecycleFactory.</p>
<p>Uma vez criado o observer, basta registrá-lo. Uma das várias alternativas é registrá-lo após a inicialização usando a anotação @Observe:</p>
<pre class="brush: java;">@Name(&quot;registerHandler&quot;)
public class RegisterFacesContextHandler {
private static final String REQUEST_PATH_EXECUTE = &quot;/execute&quot;;

@Observer(&quot;org.jboss.seam.postInitialization&quot;)
public void initHandler() {
RequestHandlerFactory.getInstance().registerHandler(REQUEST_PATH_EXECUTE, new RemotingFacesContextHandler());

}

}</pre>
<p>Após inicializado o Seam (org.jboss.seam.postInitialization) o observer é registrado. Com isto você pode chamar FacesContext.getCurrentInstance() que não receberá aquele NullPointerException indesejado. <img src='http://www.marcossousa.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2009/06/27/facescontext-em-seam-remoting-calls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generator do Seam 2.1 não é compativel com 2.0.x</title>
		<link>http://www.marcossousa.com/2009/03/28/generator-do-seam-21-nao-e-compativel-com-20x/</link>
		<comments>http://www.marcossousa.com/2009/03/28/generator-do-seam-21-nao-e-compativel-com-20x/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 22:30:33 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Seam Framework]]></category>
		<category><![CDATA[Seam-gen]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=169</guid>
		<description><![CDATA[Fazendo alguns testes com o Seam acabei descobrindo uma falha de compatibilidade do Seam Generator da versão 2.1 com as versões anteriores. O problema reside nos filtros que são criados nas páginas de listagens.
Nas versões anteriores, o componente para as páginas de listagens sobrescreviam os métodos:
- getEjbql: Consulta EJB QL usada para a listagem.
- getMaxResults: [...]]]></description>
			<content:encoded><![CDATA[<p>Fazendo alguns testes com o Seam acabei descobrindo uma falha de compatibilidade do Seam Generator da versão 2.1 com as versões anteriores. O problema reside nos filtros que são criados nas páginas de listagens.</p>
<p>Nas versões anteriores, o componente para as páginas de listagens sobrescreviam os métodos:<br />
- <strong>getEjbql</strong>: Consulta EJB QL usada para a listagem.<br />
- <strong>getMaxResults</strong>: Define a quantidade de registros a serem retornados pela listagem.<br />
- <strong>getRestrictions</strong>: Retorna lista de restrições a serem adicionadas a consulta.</p>
<p>Porém na versão 2.1 estes métodos deixaram de ser usados na geração do código. O problema é que o método <strong>getRestrictions </strong>teve o retorno aterado. Nas versões anteriores ele retornava uma lista de Strings, já na versão 2.1 o tipo de retorno foi alterado para uma lista de ValueExpression.</p>
<p>Com isto um código gerado na versão na versão 2.0.3, por exemplo, gera ClassCastException ao tentar converter String em ValueExpression. Solução? Atualizar o código, veja o antes e o depois:</p>
<pre class="brush: java;">@Name(&quot;userList&quot;)
public class UserList extends EntityQuery {

private static final String[] RESTRICTIONS = {
&quot;lower(user.login) like concat(lower(#{userList.user.login}),'%')&quot;,
&quot;lower(user.name) like concat(lower(#{userList.user.name}),'%')&quot;};

private final User user = new User();
@Override
public String getEjbql() {
return &quot;select user from User user&quot;;
}

@Override
public Integer getMaxResults() {
return 25;
}

public User getUser() {
return user;
}

@Override
public List&lt;string&gt; getRestrictions() {
return Arrays.asList(RESTRICTIONS);
}

}</pre>
<p>A versão 2.1 o código gerado é algo semelhante a:</p>
<pre class="brush: java;">@Name(&quot;userList&quot;)
public class UserList extends EntityQuery&lt;user&gt; {

private static final String EJBQL = &quot;select user from User user&quot;;

private static final String[] RESTRICTIONS = {
&quot;lower(user.login) like concat(lower(#{userList.user.login}),'%')&quot;,
&quot;lower(user.name) like concat(lower(#{userList.user.name}),'%')&quot;};

private final User user = new User();

public UserList() {
setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
setMaxResults(25);
setEjbql(EJBQL);
}

public User getUser() {
return user;
}
}</pre>
<p>Até que seja corrigido o problema fica a dica.</user></string></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2009/03/28/generator-do-seam-21-nao-e-compativel-com-20x/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>WebMobile edição 22</title>
		<link>http://www.marcossousa.com/2009/01/19/webmobile-edicao-22/</link>
		<comments>http://www.marcossousa.com/2009/01/19/webmobile-edicao-22/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 12:34:10 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Seam Framework]]></category>
		<category><![CDATA[WebMobile]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=143</guid>
		<description><![CDATA[Peço desculpas a todos os leitores pela ausência nos últimos meses, faculdade, projetos com prazos curtos e mudança de cidade acabaram comprometendo o tempo destinado ao blog.
Esta semana foi publicada a edição 22 Web Mobile com uma matéria minha sobre o Jboss Seam, &#8220;Seam Framework: Simplificando o desenvolvimento Java Web&#8221;. Este artigo fala dos fundamentos [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.marcossousa.com/wp-content/uploads/2009/01/capawm22_m.jpg"><img class="alignleft size-full wp-image-145" title="Web Mobile 22" src="http://www.marcossousa.com/wp-content/uploads/2009/01/capawm22_m.jpg" alt="" width="125" height="166" /></a>Peço desculpas a todos os leitores pela ausência nos últimos meses, faculdade, projetos com prazos curtos e mudança de cidade acabaram comprometendo o tempo destinado ao blog.</p>
<p>Esta semana foi publicada a edição 22 Web Mobile com uma matéria minha sobre o Jboss Seam, &#8220;Seam Framework: Simplificando o desenvolvimento Java Web&#8221;. Este artigo fala dos fundamentos e dos principais recurso do Jboss Seam.</p>
<p>No início do artigo foi abordado o Core do framework, com uma visão de como são tratados os componentes Seam, e de como é realizada o controle de transações e injeção de dependências.</p>
<p>Foram abordados também os contextos, o conceito de PageActions e a integração com WebServices. Por fim listei alguns recursos extras que deixa o Seam ainda mais competitivo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2009/01/19/webmobile-edicao-22/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vídeo Aulas: Seam Extras partes 8 e 9</title>
		<link>http://www.marcossousa.com/2008/11/01/video-aulas-seam-extras-partes-8-e-9/</link>
		<comments>http://www.marcossousa.com/2008/11/01/video-aulas-seam-extras-partes-8-e-9/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 19:15:54 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Vídeo Aulas]]></category>
		<category><![CDATA[Java Vídeo Magazine]]></category>
		<category><![CDATA[JavaServer Faces]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Seam Framework]]></category>
		<category><![CDATA[Vídeo Aula]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=134</guid>
		<description><![CDATA[Foram publicadas no portal Java Magazine a 8ª e a 9ª parte da série de vídeo aulas sobre os extras Seam Framework.
A parte 8, faz a introdução do Seam Remoting. São mostradas as configurações necessárias e a forma de acesso a componentes SEAM. O Seam Remoting é uma forma eficiente acessar componentes SEAM usando AJAX, [...]]]></description>
			<content:encoded><![CDATA[<p>Foram publicadas no portal <a href="http://www.javamagazine.com.br/">Java Magazine</a> a 8ª e a 9ª parte da série de vídeo aulas sobre os extras <a href="http://www.seamframework.org/">Seam Framework</a>.</p>
<p>A parte 8, faz a introdução do Seam Remoting. São mostradas as configurações necessárias e a forma de acesso a componentes SEAM. O Seam Remoting é uma forma eficiente acessar componentes SEAM usando AJAX, permitindo ao desenvolvedor resolver problemas que os componentes disponíveis no mercado não atendem. Para utilizá-lo é facil, basta apenas ter o SeamResourceServlet configurado e basta chamar os arquivos javascript ou usar a tag remote para usar os componentes, veja o exemplo:</p>
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot; src=&quot;seam/resource/remoting/resource/remote.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;seam/resource/remoting/interface.js?newsHome&amp;amp;usersHome&quot;&gt;&lt;/script&gt;
&lt;!-- Mesmo resultado em relação as 2 linhas anteriores--&gt;
&lt;s :remote include=&quot;newsHome,usersHome&quot;/&gt;
</pre>
<p>A parte 9 aborda uma feature interessante, a resolução de EL. Como uma expression language é resolvida durante a rendereização da página, para usar este recurso é preciso usar a função dentro fora da página em um arquivo Javascript. Depois é só chamar a função da seguinte forma:</p>
<pre class="brush: jscript;">
Seam.Remoting.eval(&quot;#{newsHome.relatedNews}&quot;, newsCallback);
// callback function
function newsCallback(newsList) {
// read news
var area = document.getElementById(&quot;relatedNews&quot;);
for (var i = 0; i &lt; newsList.length; i++) {
var news = newsList[i];
var span = document.createElement(&quot;span&quot;);
span.innerHTML = &quot;&lt;h4&gt;&lt;a href='ViewNews.seam?newsId=&quot; + news.getId() + &quot;'&gt;&quot; +
news.getTitle() + &quot;&lt;/a&gt;&quot; + news.getDescription();
area.appendChild(span);
}
}
</pre>
<p>A última vídeo aula da série mostrará chamadas em lote e a utilização de classes que não são componentes SEAM.</p>
<p><a title="Acesso à página de download da vídeo aula" href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=10836">Parte 8</a><br />
<a title="Acesso à página de download da vídeo aula" href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=10837">Parte 9</a></p>
<p><a title="Download dos fontes das Video Aulas" href="http://www.marcossousa.com/wp-content/uploads/2008/11/fontes_seamextras_partes8e9.zip">Arquivos Fontes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/11/01/video-aulas-seam-extras-partes-8-e-9/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Seam 2.1 released!</title>
		<link>http://www.marcossousa.com/2008/10/23/seam-21-released/</link>
		<comments>http://www.marcossousa.com/2008/10/23/seam-21-released/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 14:21:58 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Seam Framework]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=131</guid>
		<description><![CDATA[Depois de algumas versões Beta e 2 candidatas a realease, o seam disponibilizou esta semana a versão 2.1 estável. Esta versão trás uma série de novos recursos, alguns deles muito interessantes como o módulo de gerenciamento de autenticação usando o modelo ACL de permissões e suporte a Wicket.
Para quem gera documentos excel, tenho uma boa [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de algumas versões Beta e 2 candidatas a realease, o seam disponibilizou esta semana a <a href="http://www.seamframework.org/Download">versão 2.1 estável</a>. Esta versão trás uma série de novos recursos, alguns deles muito interessantes como o <a href="http://shane.bryzak.com/blog/articles/seam_security_gets_an_upgrade">módulo de gerenciamento de autenticação</a> usando o modelo <a href="http://en.wikipedia.org/wiki/Access_Control_List">ACL </a>de permissões e <a href="http://docs.jboss.org/seam/2.1.0.GA/reference/en-US/html/wicket.html">suporte a Wicket</a>.</p>
<p>Para quem gera documentos excel, tenho uma boa notícia, agora facilmente será possível criar documentos XLS utilizando um <a href="http://docs.jboss.org/seam/2.1.0.GA/reference/en-US/html/excel.html">módulo específico do Seam</a> para isto. Integrado ao <a href="http://jexcelapi.sourceforge.net/">JExcelAPI</a>, o módulo possibilita gerar planilhas com um simples documento XHTML de maneira bem semelhante ao geração de PDF, <a href="http://www.marcossousa.com/2008/07/01/gere-pdf-de-qualidade-em-10-minutos/">que já abordada anteriomente</a>.</p>
<p>A criação de URL User Friendly agora tem suporte buit in ao URL Rewriter sem contar o suporte a <a href="http://jcp.org/en/jsr/detail?id=311">JAX-RS</a> através do suporte ao <a href="http://jboss.org/resteasy">RESTeasy</a>. A parte Core sofreu várias melhorias com melhor suporte a Cache e principalmente o suporte a chamadas simultâneas dentro de um mesmo escopo de conversação.</p>
<p>A melhoria da performance e escalabilidade terão destaque para o próximo release. A documentação para clustering está sendo preparada para usar juntamente com o Jboss Clustering. Há também rumores que nos próximos realeases o suporte ao <a href="http://openid.net">OpenID </a>já estará disponível.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/10/23/seam-21-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vídeo Aulas: Seam Extras partes 6 e 7</title>
		<link>http://www.marcossousa.com/2008/09/24/seam-extra-parte-6-e-7/</link>
		<comments>http://www.marcossousa.com/2008/09/24/seam-extra-parte-6-e-7/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 14:46:51 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Vídeo Aulas]]></category>
		<category><![CDATA[Captcha]]></category>
		<category><![CDATA[Java Vídeo Magazine]]></category>
		<category><![CDATA[JavaMail]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Vídeo Aula]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=108</guid>
		<description><![CDATA[Foram publicadas no portal Java Magazine a 6ª e 7ª parte da série de vídeo aulas sobre os extras Seam Framework.
A parte 6, mostra todos os passos para enviar e-mails usando o módulo de integração do Seam Framework com a JavaMail. O Seam Framework possui um gerenciador de envio de e-mails e para usá-lo é [...]]]></description>
			<content:encoded><![CDATA[<p>Foram publicadas no portal <a href="http://www.javamagazine.com.br/">Java Magazine</a> a 6ª e 7ª parte da série de vídeo aulas sobre os extras <a href="http://www.seamframework.org/">Seam Framework</a>.</p>
<p>A parte 6, mostra todos os passos para enviar e-mails usando o módulo de integração do <a href="http://www.seamframework.org/">Seam Framework</a> com a <a href="http://java.sun.com/products/javamail">JavaMail</a>. O <a href="http://www.seamframework.org/">Seam Framework</a> possui um gerenciador de envio de <em>e-mails</em> e para usá-lo é bastante simples. Vejo sempre em fóruns a dificuldade que usuários tem para enviar e-mails usando uma conta SMTP do google, porém o Seam oferece diversas facilidades para configuração. O código abaixo configura o envio de e-mails usando uma conta do Google.</p>
<pre class="brush: xml;">
&lt;mail :mail-session host=&quot;smtp.gmail.com&quot; port=&quot;587&quot; username=&quot;testes@marcossousa.com&quot; password=&quot;java2008.&quot; ssl=&quot;false&quot; tls=&quot;true&quot;/&gt;
</pre>
<p>Para configurar a mensagem é bem simples, basta criar um arquivo XHTML usando as tags m:message. Nos fontes há o exemplo demonstrado na vídeoaula.</p>
<p>Já a parte 7 aborda outro tópico interessante, a utilização de <a href="http://pt.wikipedia.org/wiki/CAPTCHA">CAPTCHA</a>. O Seam oferece uma solução básica, que gera imagens usando representação de somas simples. Na vídeo eu mostro como customizar a classe para gerar imagens mais complexas, no exemplo criado gera códigos alfanuméricos de 6 caracteres. Por padrão, basta apenas configurar o <a href="http://docs.jboss.com/seam/latest/reference/en-US/html/security.html#d0e8707">Seam Resource Servlet</a> e usar o código abaixo:</p>
<pre class="brush: xml;">&lt;s :decorate id=&quot;verification&quot;&gt;
&lt;h :graphicImage value=&quot;/seam/resource/captcha&quot; id=&quot;captchaimg&quot; /&gt;
&lt;h :inputText value=&quot;#{captcha.response}&quot;  required=&quot;true&quot; id=&quot;verify&quot;&gt;
&lt;s :validate&gt;&lt;/s&gt;
&lt;a :support event=&quot;onblur&quot; reRender=&quot;verification&quot; bypassUpdates=&quot;true&quot; ajaxSingle=&quot;true&quot;&gt;&lt;/a&gt;
&lt;/h&gt;
&lt;/s&gt;
</pre>
<p>As próximas vídeo aulas da série abordarão as funcionalidades do <a href="http://docs.jboss.com/seam/latest/reference/en-US/html/remoting.html">Seam Remoto</a>. <img src='http://www.marcossousa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=10353">Parte 6</a><br />
<a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=10354">Parte 7</a></p>
<p><a href="http://www.marcossousa.com/wp-content/uploads/2008/09/newsmanager.zip">Arquivos Fontes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/09/24/seam-extra-parte-6-e-7/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Vídeo Aula: Seam Extras &#8211; Gerando PDF</title>
		<link>http://www.marcossousa.com/2008/07/31/video-aula-seam-extras-gerando-pdf/</link>
		<comments>http://www.marcossousa.com/2008/07/31/video-aula-seam-extras-gerando-pdf/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 13:11:30 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Vídeo Aulas]]></category>
		<category><![CDATA[Itext]]></category>
		<category><![CDATA[Java Magazine]]></category>
		<category><![CDATA[Java Vídeo Magazine]]></category>
		<category><![CDATA[jboss-seam-itext]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Seam PDF]]></category>
		<category><![CDATA[Vídeo Aula]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=101</guid>
		<description><![CDATA[Foi publicada no portal Java Magazine  a parte 5ª da série de vídeo aulas sobre os extras Seam Framework.
Esta parte mostra um passo-a-passo para criar documentos em PDF usando o módulo de integração do Seam Framework com o iText. Na vídeo aula, são apresentadas algumas das tags descritas na publicação Gere PDF de Qualidade [...]]]></description>
			<content:encoded><![CDATA[<p>Foi publicada no portal <a href="http://www.javamagazine.com.br/">Java Magazine</a>  a parte 5ª da série de vídeo aulas sobre os extras <a href="http://www.seamframework.org/">Seam Framework</a>.</p>
<p>Esta parte mostra um passo-a-passo para criar documentos em PDF usando o módulo de integração do <a href="http://www.seamframework.org/">Seam Framework</a> com o <a href="http://www.lowagie.com/iText">iText</a>. Na vídeo aula, são apresentadas algumas das tags descritas na publicação <a href="http://www.marcossousa.com/2008/07/01/gere-pdf-de-qualidade-em-10-minutos/">Gere PDF de Qualidade em 10 minutos</a>, o documento resultante gera um PDF que contém imagens, títulos, texto HTML formatado e um rodapé contendo texto e numeração.</p>
<p>As próximas vídeo aulas abordarão o envio de e-mails, CAPTCHA e agendamento de tarefas. <img src='http://www.marcossousa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href='http://www.marcossousa.com/wp-content/uploads/2008/07/newsmanager.zip'>Arquivos Fontes</a><br />
<a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=9759">Vídeo aula</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/07/31/video-aula-seam-extras-gerando-pdf/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Vídeo Aulas: Seam Extras parte 4</title>
		<link>http://www.marcossousa.com/2008/07/29/video-aulas-seam-extras-parte-4/</link>
		<comments>http://www.marcossousa.com/2008/07/29/video-aulas-seam-extras-parte-4/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 11:57:16 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Vídeo Aulas]]></category>
		<category><![CDATA[Java Magazine]]></category>
		<category><![CDATA[Java Vídeo Magazine]]></category>
		<category><![CDATA[JSF]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=99</guid>
		<description><![CDATA[Foi publicada no portal Java Magazine  a parte 4ª da série de vídeo aulas sobre os extras Seam Framework.
Nesta parte não foi demonstrado nenhum recurso especial do Seam Framework, porém foi demonstrado o uso do componente input suggestion. 
Link da Vídeo Aula
Arquivos fontes
As próximas partes abordarão a geração de PDF e envio de e-mails. [...]]]></description>
			<content:encoded><![CDATA[<p>Foi publicada no portal <a href="http://www.javamagazine.com.br/">Java Magazine</a>  a parte 4ª da série de vídeo aulas sobre os extras <a href="http://www.seamframework.org/">Seam Framework</a>.</p>
<p>Nesta parte não foi demonstrado nenhum recurso especial do <a href="http://www.seamframework.org/">Seam Framework</a>, porém foi demonstrado o uso do componente <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/suggestionBox.jsf?c=suggestionBox">input suggestion</a>. </p>
<p><a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=9700">Link da Vídeo Aula</a><br />
<a href='http://www.marcossousa.com/wp-content/uploads/2008/07/newsmanager.rar'>Arquivos fontes</a></p>
<p>As próximas partes abordarão a geração de PDF e envio de e-mails. <img src='http://www.marcossousa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/07/29/video-aulas-seam-extras-parte-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vídeo Aulas: Seam Extras partes 1 a 3</title>
		<link>http://www.marcossousa.com/2008/07/22/video-aulas-seam-extras-1-3/</link>
		<comments>http://www.marcossousa.com/2008/07/22/video-aulas-seam-extras-1-3/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 04:35:10 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[RichFaces]]></category>
		<category><![CDATA[Vídeo Aulas]]></category>
		<category><![CDATA[a4j:mediaOutput]]></category>
		<category><![CDATA[Java Magazine]]></category>
		<category><![CDATA[Java Vídeo Magazine]]></category>
		<category><![CDATA[JavaServer Faces]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Rich Faces]]></category>
		<category><![CDATA[rich:fileUpload]]></category>
		<category><![CDATA[Vídeo Aula]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=98</guid>
		<description><![CDATA[Foi publicada no portal Java Magazine  as 3 primeiras partes de uma série de vídeo aulas sobre os extras Seam Framework. Esta série abordará alguns recursos interessantes do Seam Framework como Geração de PDFs, Envio de e-mails, Integração com Captcha e Agendamento de Tarefas. Nesta série também procurei demonstrar através de um sistema de [...]]]></description>
			<content:encoded><![CDATA[<p>Foi publicada no portal <a href="http://www.javamagazine.com.br/">Java Magazine</a>  as 3 primeiras partes de uma série de vídeo aulas sobre os extras <a href="http://www.seamframework.org/">Seam Framework</a>. Esta série abordará alguns recursos interessantes do <a href="http://www.seamframework.org/">Seam Framework</a> como Geração de PDFs, Envio de e-mails, Integração com Captcha e Agendamento de Tarefas. Nesta série também procurei demonstrar através de um sistema de cadastro de notícias alguns recursos interessantes do RichFaces como Upload de múltiplos arquivos e auto-completar.</p>
<p><a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=9675">A primeira vídeo aula</a> aborda a criação e configuração da aplicação. É criado o banco de dados, criação dos formulários e aplicado restrições de acesso a pasta dos cadastros de usuários, tags, anexos e notícias. </p>
<p><a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=9688">A segunda parte</a> aborda a criação de uma classe de criptografia <a href="http://pt.wikipedia.org/wiki/MD5">MD5</a>, criptografia e validação de senhas no cadastro de usuário e customização da classe de autenticação de usuários usada pelo <a href="http://www.seamframework.org/">Seam Framework</a>.</p>
<p>Por fim <a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=9689">a terceira parte</a> abordou a implementação do código necessário para fazer upload de arquivos usando o componente do RichFaces <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/fileUpload.jsf?c=fileUpload">rich:fileUpload</a>. No exemplo, foi limitado o tamanho máximo de arquivos, o tipo do arquivo (apenas imagens) e implementado a ação de modo que salvasse a imagem no Banco de Dados usando o Hibernate. Por fim foi apresentado também como pode ser realizado a exibição de imagens usando o <a href="http://livedemo.exadel.com/richfaces-demo/richfaces/mediaOutput.jsf?c=mediaOutput">a4j:mediaOutput</a>.</p>
<p>As próximas vídeo aulas mostrarei a implementação do recurso de autocompletar, semelhante ao WordPress, e mostrarei também a geração de PDF e Envio de e-mails. Vale a pena conferir!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/07/22/video-aulas-seam-extras-1-3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Gere PDF de qualidade em 10 minutos</title>
		<link>http://www.marcossousa.com/2008/07/01/gere-pdf-de-qualidade-em-10-minutos/</link>
		<comments>http://www.marcossousa.com/2008/07/01/gere-pdf-de-qualidade-em-10-minutos/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 13:28:36 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Itext]]></category>
		<category><![CDATA[jboss-seam-itext]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Seam Framework]]></category>
		<category><![CDATA[Seam PDF]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=96</guid>
		<description><![CDATA[O Seam Framework tem um grande leque de extras, na minha opinião é onde o Seam mais se destaca. Possui integração com Hibernate, Spring, Groovy, EJB, GWT, Quartz, Java Mail e por aí vai! Bom hoje vou falar um pouco do suporte do seam para integração do iText. 
Basicamente para usar em um projeto Seam, [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://www.seamframework.org">Seam Framework</a> tem um grande leque de extras, na minha opinião é onde o Seam mais se destaca. Possui integração com <a href="http://www.hibernate.org">Hibernate</a>, <a href="http://www.springframework.org">Spring</a>, <a href="http://groovy.codehaus.org">Groovy</a>, <a href="http://java.sun.com/products/ejb">EJB</a>, <a href="http://code.google.com/webtoolkit">GWT</a>, <a href="http://www.opensymphony.com/quartz/">Quartz</a>, <a href="http://java.sun.com/products/javamail/">Java Mail</a> e por aí vai! Bom hoje vou falar um pouco do suporte do seam para integração do <a href="http://www.lowagie.com/iText">iText</a>. </p>
<p>Basicamente para usar em um projeto Seam, basta adicionar a lib do itext e a lib de intregração jboss-seam.jar. Feito isto, basta criar páginas xhtml que use as tags de geração de arquivos PDF. Uma das opções que mais me chamaram a atenção foi a possibilidade de adicionar código html, algo que estava procurando para impressão de campos que usam o formato RichText. Outra coisa que me chamou a atenção foi a velocidade, um mesmo PDF que era gerado usando iReports levou um bom tempo a mais do que o gerando usando o Seam. As opções básicas como cabeçalho, rodapé e quebra de página estão presentes.</p>
<p>Tudo que é preciso fazer é criar uma página xhtml usando a tag p:document com o namespace http://jboss.com/products/seam/pdf:</p>
<pre class="brush: xml;">
&lt;p :document xmlns:p=&quot;http://jboss.com/products/seam/pdf&quot;&gt;
  &lt;!-- Coloque aqui o conteúdo do documento --&gt;
&lt;/p&gt;
</pre>
<p>A tag de paragraph permite a criação de parágrafos de forma semelhante ao um documento HTML, para exibir um dado de uma EL JSF há três maneiras básicas: Colocar a EL direto no texto, usar o componente JSF padrão h:outputText ou ainda usar o componente do Seam p:text. Veja o exemplo:</p>
<pre class="brush: xml;">
&lt;p :paragraph&gt;
    Olá #{user.name}, você foi registrado com sucesso, seu login é &lt;h <img src='http://www.marcossousa.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> utputText value=&quot;#{user.login}&quot; /&gt; e seu último acesso foi em: &lt;/p&gt;&lt;p :text value=&quot;#{user.lastAcess}&quot;&gt;
        &lt;f :convertDateTime pattern=&quot;dd/MM/yyyy HH:mm&quot; /&gt;
    &lt;/p&gt;</pre>
<p>E não podia deixar de destacar, também deixar de destacar a habilidade do Seam de renderizar código HTML através da tag p:html:</p>
<pre class="brush: xml;">
&lt;p :html&gt;
    &lt;h1&gt;Título 1 em html&lt;/h1&gt;
    &lt;table&gt;
        &lt;th&gt;
              &lt;td&gt;Título 1&lt;/td&gt;
              &lt;td&gt;Título 2&lt;/td&gt;
        &lt;/th&gt;
        &lt;tr&gt;
              &lt;td&gt;Linha 1&lt;/td&gt;
              &lt;td&gt;Linha 1&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
              &lt;td&gt;linha 2&lt;/td&gt;
              &lt;td&gt;Linha 2&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
    &lt;ul&gt;
        &lt;li&gt;Item 1&lt;/li&gt;
        &lt;li&gt;Item 2&lt;/li&gt;
        &lt;li&gt;Item 3&lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;
</pre>
<p>Caso se interesse pelo assunto, sugiro acessar o <a href="http://docs.jboss.com/seam/2.0.1.GA/reference/en/html/itext.html">Guia de Referência</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/07/01/gere-pdf-de-qualidade-em-10-minutos/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
