<?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>Rubens Gadelha</title>
	<atom:link href="http://www.rubensgadelha.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rubensgadelha.net</link>
	<description>Tecnologia da Informação e Atualidades</description>
	<lastBuildDate>Mon, 22 Feb 2010 15:38:35 +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>Tutorial com exemplo de integração Vaadin + Hibernate utilizando a classe HbnContainer</title>
		<link>http://www.rubensgadelha.net/2010/02/22/tutorial-com-exemplo-de-integracao-vaadin-hibernate-utilizando-a-classe-hbncontainer/</link>
		<comments>http://www.rubensgadelha.net/2010/02/22/tutorial-com-exemplo-de-integracao-vaadin-hibernate-utilizando-a-classe-hbncontainer/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 15:38:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Vaadin]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=192</guid>
		<description><![CDATA[Neste tutorial irei apresentar um exemplo de como alimentar uma listagem (componente Table) do Vaadin simplesmente configurando seu DataSource como sendo uma classe-entidade do Hibernate.
Utilizaremos uma classe bastante interessante chamada HbnContainer, que está na incubadora, portanto, ainda não faz parte do core do Vaadin. Baixe-a neste link e junte ao código-fonte do seu projeto.
Primeiro adicione [...]]]></description>
			<content:encoded><![CDATA[<p>Neste tutorial irei apresentar um exemplo de como alimentar uma listagem (componente <a title="Vaadin Table" href="http://vaadin.com/book/-/page/components.table.html" target="_blank">Table</a>) do Vaadin simplesmente configurando seu DataSource como sendo uma classe-entidade do Hibernate.</p>
<p>Utilizaremos uma classe bastante interessante chamada <a href="http://dev.vaadin.com/browser/incubator/hbncontainer/src/com/itmill/toolkit/data/hbnutil/HbnContainer.java?rev=6383" target="_blank">HbnContainer</a>, que está na incubadora, portanto, ainda não faz parte do core do Vaadin. Baixe-a <a href="http://dev.vaadin.com/browser/incubator/hbncontainer/src/com/itmill/toolkit/data/hbnutil/HbnContainer.java?rev=6383" target="_blank">neste link</a> e junte ao código-fonte do seu projeto.</p>
<p>Primeiro adicione o seguite código ao método init() da sua classe Application (AlunosApplication, no meu caso), ele irá gerenciar as sessões do Hibernate, fechando-as no final de cada transação:</p>

<div class="wp_syntax"><div 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> AlunosApplication <span style="color: #000000; font-weight: bold;">extends</span> Application <span style="color: #000000; font-weight: bold;">implements</span> SessionManager <span style="color: #009900;">&#123;</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        getContext<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">addTransactionListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TransactionListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            @Override
            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> transactionEnd<span style="color: #009900;">&#40;</span>Application application, <span style="color: #003399;">Object</span> transactionData<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>application <span style="color: #339933;">==</span> BiometriaApplication.<span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    closeSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            @Override
            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> transactionStart<span style="color: #009900;">&#40;</span>Application application, <span style="color: #003399;">Object</span> transactionData<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Faça com que a sua classe Application implemente a interface <strong>SessionManager</strong>, que pertence a <strong>HbnContainer</strong>. Em seguida, adicione a ela os seguintes métodos:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Retorna a sessão atual do Hibernate. 
     * Também assegura uma transação aberta do Hibernate.
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> Session getSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Session currentSession <span style="color: #339933;">=</span> HibernateUtil.<span style="color: #006633;">getSessionFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getCurrentSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>currentSession.<span style="color: #006633;">getTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">isActive</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            currentSession.<span style="color: #006633;">beginTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> currentSession<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> closeSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Session sess <span style="color: #339933;">=</span> HibernateUtil.<span style="color: #006633;">getSessionFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getCurrentSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>sess.<span style="color: #006633;">getTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">isActive</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            sess.<span style="color: #006633;">getTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">commit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>sess.<span style="color: #006633;">isOpen</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> sess.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>A classe <strong>HibernateUtil</strong>, citada no código acima, irá nos fornecer as sessões do Hibernate:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">net.rubensgadelha.alunos.util</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.SessionFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.cfg.AnnotationConfiguration</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HibernateUtil <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> SessionFactory sessionFactory<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// Cria o SessionFactory com base no arquivo hibernate.cfg.xml</span>
            sessionFactory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AnnotationConfiguration<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">configure</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">buildSessionFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Throwable</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">err</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Falha na inicialização da SessionFactory: &quot;</span> <span style="color: #339933;">+</span> ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ExceptionInInitializerError</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> SessionFactory getSessionFactory<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> sessionFactory<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Agora que já concluímos o ambiente <strong>Vaadin + Hibernate</strong>, criemos a classe mapeada pelo Hibernate:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">net.rubensgadelha.alunos.bean</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.Serializable</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.persistence.Column</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.persistence.Entity</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.persistence.Id</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.persistence.Table</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.validator.Length</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.validator.NotNull</span><span style="color: #339933;">;</span>
&nbsp;
@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;serial&quot;</span><span style="color: #009900;">&#41;</span>
@<span style="color: #003399;">Entity</span>
@Table<span style="color: #009900;">&#40;</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;alunos&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Aluno <span style="color: #000000; font-weight: bold;">implements</span> <span style="color: #003399;">Serializable</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    @Id
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Long</span> oid<span style="color: #339933;">;</span>
&nbsp;
    @Column<span style="color: #009900;">&#40;</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;matricula&quot;</span>, nullable<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">false</span>, length<span style="color: #339933;">=</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span>
    @NotNull
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Integer</span> matricula<span style="color: #339933;">;</span>
&nbsp;
    @Column<span style="color: #009900;">&#40;</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;nome&quot;</span><span style="color: #009900;">&#41;</span>
    @NotNull @Length<span style="color: #009900;">&#40;</span>min<span style="color: #339933;">=</span><span style="color: #cc66cc;">5</span>, max<span style="color: #339933;">=</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> nome<span style="color: #339933;">;</span>
&nbsp;
    @Column<span style="color: #009900;">&#40;</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;email&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> email<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setOid<span style="color: #009900;">&#40;</span><span style="color: #003399;">Long</span> oid<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;">oid</span> <span style="color: #339933;">=</span> oid<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;">Long</span> getOid<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> oid<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> setMatricula<span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span> matricula<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;">matricula</span> <span style="color: #339933;">=</span> matricula<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;">Integer</span> getMatricula<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> matricula<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> getNome<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> nome<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> setNome<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> nome<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;">nome</span> <span style="color: #339933;">=</span> nome<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> getEmail<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> email<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> setEmail<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> email<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;">email</span> <span style="color: #339933;">=</span> email<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Finalmente, informamos que a classe acima, que representa uma tabela no banco de dados, irá popular a tabela do Vaadin representada na classe abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">net.rubensgadelha.alunos.ui</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.rubensgadelha.alunos.AlunosApplication</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.rubensgadelha.alunos.bean.Aluno</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">net.rubensgadelha.alunos.util.HbnContainer</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.vaadin.ui.Table</span><span style="color: #339933;">;</span>
&nbsp;
@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;serial&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TabelaAlunos <span style="color: #000000; font-weight: bold;">extends</span> Table <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> ListaAlunos<span style="color: #009900;">&#40;</span>AlunosApplication app<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        HbnContainer hbn <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HbnContainer<span style="color: #009900;">&#40;</span>Aluno.<span style="color: #000000; font-weight: bold;">class</span>, app<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        setContainerDataSource<span style="color: #009900;">&#40;</span>hbn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto! Agora basta que você adicione o componente acima na sua aplicação e você verá que ele será automaticamente populado com os dados do banco.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2010/02/22/tutorial-com-exemplo-de-integracao-vaadin-hibernate-utilizando-a-classe-hbncontainer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolva RIA&#8217;s rapidamente com o framework Java Vaadin</title>
		<link>http://www.rubensgadelha.net/2010/02/19/desenvolva-rias-rapidamente-com-o-framework-java-vaadin/</link>
		<comments>http://www.rubensgadelha.net/2010/02/19/desenvolva-rias-rapidamente-com-o-framework-java-vaadin/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 16:02:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Vaadin]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=182</guid>
		<description><![CDATA[Se você gosta de desenvolver RIA&#8217;s (Rich Internet Applications), não poderá deixar de conhecer o framework Java Vaadin. Com ele você produzirá interfaces bastante interessantes e semelhantes às de uma aplicação desktop, porém, sem preocupar-se com código HTML, CSS ou Javascript, ou seja, você desenvolve 100% em Java como se fosse uma aplicação com Swing, [...]]]></description>
			<content:encoded><![CDATA[<p>Se você gosta de desenvolver <a href="http://pt.wikipedia.org/wiki/Internet_rica" target="_blank">RIA</a>&#8217;s (<a href="http://pt.wikipedia.org/wiki/Internet_rica" target="_blank">Rich Internet Applications</a>), não poderá deixar de conhecer o framework Java <a href="http://vaadin.com">Vaadin</a>. Com ele você produzirá interfaces bastante interessantes e semelhantes às de uma aplicação desktop, porém, sem preocupar-se com código HTML, CSS ou Javascript, ou seja, você desenvolve 100% em Java como se fosse uma aplicação com Swing, pois tanto o processo de desenvolvimento quanto os componentes disponibilizados são bem parecidos, e o framework irá gerar todas as janelas, botões, <em>popups</em>, menus em HTML com temas CSS atraentes e personalizáveis e toda integração entre os componentes já implementada via ajax utilizando o famoso <a title="Google Web Toolkit" href="http://code.google.com/intl/pt-BR/webtoolkit/" target="_blank">GWT &#8211; Google Web Toolkit</a> &#8211; de onde provêm também seus <em>widgets</em>.</p>
<p>Para aprender mais sobre esse framework, o site oficial disponibiliza (em inglês), <a title="Tutoriais do Vaadin" href="http://vaadin.com/tutorial" target="_blank">três tutorais</a>: Uma versão que pode ser concluída em 5 minutos para uma breve iniciação, outra que durará em média 1 hora e, para quem desejar se aprofundar mais no assunto, eles disponibilizam o <a title="Book of Vaadin" href="http://vaadin.com/book" target="_blank">Book of Vaadin</a>, cuja leitura e análise duram em média 1 dia.</p>
<div id="attachment_185" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-185 " title="Exemplo-Vaadin" src="http://www.rubensgadelha.net/wp-content/uploads/2010/02/finished-application1-300x156.png" alt="Exemplo de aplicação com Vaadin" width="300" height="156" /><p class="wp-caption-text">Exemplo de aplicação com Vaadin</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2010/02/19/desenvolva-rias-rapidamente-com-o-framework-java-vaadin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convertendo HTML em PDF no Zend Framework utilizando html2fpdf</title>
		<link>http://www.rubensgadelha.net/2009/05/26/convertendo-html-em-pdf-no-zend-framework-utilizando-html2fpdf/</link>
		<comments>http://www.rubensgadelha.net/2009/05/26/convertendo-html-em-pdf-no-zend-framework-utilizando-html2fpdf/#comments</comments>
		<pubDate>Tue, 26 May 2009 20:42:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Zend]]></category>
		<category><![CDATA[Helper]]></category>
		<category><![CDATA[Pdf]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=168</guid>
		<description><![CDATA[Olá pessoal,
Após um bom tempo sem artigos, estou de volta!   
A tarefa de criar documentos PDF sempre foi uma &#8220;pedra no sapato&#8221; de qualquer programador PHP, haja vista que era um processo trabalhoso, que exige testes e mais testes de posicionamento e ainda sim não se chegava a um resultado satisfatório.
Para sanar esse [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal,</p>
<p>Após um bom tempo sem artigos, estou de volta!  <img src='http://www.rubensgadelha.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>A tarefa de criar documentos PDF sempre foi uma &#8220;pedra no sapato&#8221; de qualquer programador PHP, haja vista que era um processo trabalhoso, que exige testes e mais testes de posicionamento e ainda sim não se chegava a um resultado satisfatório.</p>
<p>Para sanar esse problema, foi criada uma classe chamada <a href="www.fpdf.org">fpdf,</a> que por si só já nos era muito útil com seus métodos para estilização de texto e alguns outros recursos. Mas ainda não era o suficiente, pois a formatação e quebra de linhas ainda eram difíceis.</p>
<p>Surgiu então a classe <a href="http://html2fpdf.sourceforge.net/">html2fpdf</a> que, na minha opinião, resolveu o problema, pois agora poderíamos estilizar um código html (com algumas limitações, é claro) e gerar o PDF com base nele.</p>
<p>Como atualmente utilizo Zend Framework, resolvi reunir as vantagens das classes acima em um Action Helper:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009933; font-style: italic;">/**
 * Action Helper para gerar PDF a partir de HTML usando HTML2PDF
 * 
 * @uses Zend_Controller_Action_Helper_Abstract
 * @uses HTML2FPDF (http://html2fpdf.sourceforge.net)
 * @uses FPDF (www.fpdf.org)
 *
 * @author Rubens Gadelha
 *
 * @param string $html
 * @param 'I'|'D'|'F'|'S' $dest
 *
 * Saidas:
 * I: Envia para a saída padrão
 * D: Download do arquivo
 * F: Salva em um arquivo local
 * S: Retorna como string
 */</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Zend_Controller_Action_Helper_Html2Pdf <span style="color: #000000; font-weight: bold;">extends</span> Zend_Controller_Action_Helper_Abstract
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> direct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span><span style="color: #339933;">,</span> <span style="color: #000088;">$output</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dest</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'D'</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$pdf</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HTML2FPDF<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">AddPage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">WriteHTML</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">utf8_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Output</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$output</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dest</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Para utilizá-lo, é muito fácil:</p>
<p><strong>1.</strong> Salve o código acima em um arquivo chamado <strong>Html2Pdf.php</strong> na pasta <strong>helpers</strong> do seu projeto;</p>
<p><strong>2.</strong> Faça o download do html2fpdf <a href="http://sourceforge.net/projects/html2fpdf">aqui</a>;</p>
<p><strong>3.</strong> Descompacte-o dentro da pasta <em>library</em> do seu projeto;</p>
<p><strong>4.</strong> Inclua essa pasta no <em>include_path</em> que, geralmente está configurado no arquivo de <em>bootstrap</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">set_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.'</span> <span style="color: #339933;">.</span> PATH_SEPARATOR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'../library/'</span>
                     <span style="color: #339933;">.</span> PATH_SEPARATOR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'../application/default/models/'</span> 
                     <span style="color: #339933;">.</span> PATH_SEPARATOR <span style="color: #339933;">.</span> <span style="color: #990000;">get_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
                     <span style="color: #666666; font-style: italic;">// inclua a linha abaixo</span>
                     <span style="color: #339933;">.</span> PATH_SEPARATOR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'../library/html2fpdf/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>5.</strong> No <em>Controller</em>, insira a linha abaixo na ação onde você deseja gerar o PDF:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// Desabilita o layout</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_helper<span style="color: #339933;">-&gt;</span><span style="color: #004000;">layout</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">disableLayout</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;">// Gera o PDF</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_helper<span style="color: #339933;">-&gt;</span><span style="color: #004000;">html2Pdf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'D'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">// Evita que o arquivo busque a respectiva view</span>
<span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<blockquote><p>
Onde:<br />
<strong>$html</strong> é o código base para geração do arquivo<br />
<strong>$file</strong> é o nome do arquivo<br />
<strong>&#8216;D&#8217;</strong> é um parâmetro que força o download do arquivo.</p>
<p>Os parâmetros possíveis são:<br />
<strong>I</strong>: Envia para a saída padrão<br />
<strong>D</strong>: Download do arquivo<br />
<strong>F</strong>: Salva em um arquivo local<br />
<strong>S</strong>: Retorna como string
</p></blockquote>
<p>Para mais detalhes sobre código html compatível, acesse a página do <a href="http://html2fpdf.sourceforge.net/">html2fpdf</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2009/05/26/convertendo-html-em-pdf-no-zend-framework-utilizando-html2fpdf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Algumas funções da camada de abstração de banco de dados do Drupal</title>
		<link>http://www.rubensgadelha.net/2009/01/30/funcoes-de-banco-de-dados-drupal/</link>
		<comments>http://www.rubensgadelha.net/2009/01/30/funcoes-de-banco-de-dados-drupal/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 03:20:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=136</guid>
		<description><![CDATA[db_query
Executa uma consulta básica no banco de dados ativo
Exemplo

$result = db_query&#40;&#34;SELECT node.nid, node.title FROM {node}
                    WHERE node.type LIKE '%s'
                  [...]]]></description>
			<content:encoded><![CDATA[<h3>db_query</h3>
<p>Executa uma consulta básica no banco de dados ativo</p>
<p><strong>Exemplo</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT node.nid, node.title FROM {node}
                    WHERE node.type LIKE '<span style="color: #009933; font-weight: bold;">%s</span>'
                    ORDER BY node.created DESC&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;noticia&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Repare no uso do marcador ‘%s’, que teve seu valor indicado como argumento logo após a consulta SQL. O uso desses marcadores é altamente recomendado pelo Drupal e funciona de forma semelhante à função <a href="http://www.php.net/sprintf" target="_blank">sprintf()</a> do PHP.</p>
<p>Outro detalhe importante é que o nome da tabela está entre chaves <strong>{ }</strong>, para que o Drupal detecte a tabela e adicione o prefixo definido no ato da instalação, caso ele exista.</p>
<h3>db_query_range</h3>
<p>Executa uma função básica no banco de dados ativo, recebendo como parâmetros adicionais os índices do primeiro e do último registro a ser exibido.</p>
<p><strong>Exemplo</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> db_query_range<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT node.nid, node.title FROM {node}
			  WHERE node.type LIKE '<span style="color: #009933; font-weight: bold;">%s</span>'
			  ORDER BY node.created DESC&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;noticia&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Essa função retornará do terceiro ao décimo registros (últimos parâmetros) da consulta.</p>
<h3>db_affected_rows</h3>
<p>Essa retorna um número inteiro correspondente ao total de registros obtidos na última consulta realizada.</p>
<p><strong>Exemplo</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">print</span> db_affected_rows<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// imprime 7</span></pre></div></div>

<h3>db_fetch_object</h3>
<p>Traz cada linha do resultado de uma consulta como um objeto.</p>
<p><strong>Exemplo</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span> <span style="color: #339933;">=</span> db_fetch_object<span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">print</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>db_fetch_array</h3>
<p>Traz cada linha do resultado de uma consulta como um array.</p>
<p><strong>Exemplo</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span> <span style="color: #339933;">=</span> db_fetch_object<span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">print</span> <span style="color: #000088;">$node</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2009/01/30/funcoes-de-banco-de-dados-drupal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Carregando o conteúdo de um node no Drupal</title>
		<link>http://www.rubensgadelha.net/2009/01/29/carregando-o-conteudo-de-um-node-no-drupal/</link>
		<comments>http://www.rubensgadelha.net/2009/01/29/carregando-o-conteudo-de-um-node-no-drupal/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 04:00:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=132</guid>
		<description><![CDATA[Se você possui o ID de um node do Drupal (nid) e deseja carregar o seu conteúdo em um bloco ou página, basta seguir os seguintes passos:

/*
 * Retorna um objeto com todas as informações do registro
 */
$node = node_load&#40;$nid&#41;;
&#160;
/*
 * Recebe como argumento o objeto do registro
 * Retorna um array estruturado relativo ao [...]]]></description>
			<content:encoded><![CDATA[<p>Se você possui o ID de um node do Drupal (nid) e deseja carregar o seu conteúdo em um bloco ou página, basta seguir os seguintes passos:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*
 * Retorna um objeto com todas as informações do registro
 */</span>
<span style="color: #000088;">$node</span> <span style="color: #339933;">=</span> node_load<span style="color: #009900;">&#40;</span><span style="color: #000088;">$nid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
 * Recebe como argumento o objeto do registro
 * Retorna um array estruturado relativo ao seu conteúdo
 */</span>
<span style="color: #000088;">$dados</span> <span style="color: #339933;">=</span> node_build_content<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
 * Renderiza o conteúdo
 */</span>
<span style="color: #b1b100;">print</span> drupal_render<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dados</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Muito simples, não!?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2009/01/29/carregando-o-conteudo-de-um-node-no-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enviar mensagens à uma nova requisição do mesmo controller do Zend Framework</title>
		<link>http://www.rubensgadelha.net/2009/01/28/enviar-mensagens-a-uma-nova-requisicao-do-mesmo-controller-do-zend-framework/</link>
		<comments>http://www.rubensgadelha.net/2009/01/28/enviar-mensagens-a-uma-nova-requisicao-do-mesmo-controller-do-zend-framework/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 22:31:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Zend]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=127</guid>
		<description><![CDATA[Quando você faz uma nova requisição ao mesmo controller, a instância atual é perdida, juntamente com as mensagens que houvera configurado.
Para enviar mensagens ao usuário em uma nova requisição, você deverá fazer uso de um helper chamado FlashMessenger, que, por sua vez, utiliza a classe Zend_Session para passar a mensagem à diante, removendo-a logo em [...]]]></description>
			<content:encoded><![CDATA[<p>Quando você faz uma nova requisição ao mesmo <em>controller</em>, a instância atual é perdida, juntamente com as mensagens que houvera configurado.</p>
<p>Para enviar mensagens ao usuário em uma nova requisição, você deverá fazer uso de um <em>helper</em> chamado <em>FlashMessenger</em>, que, por sua vez, utiliza a classe <em>Zend_Session</em> para passar a mensagem à diante, removendo-a logo em seguida.</p>
<p>Segue um exemplo de uso desse <em>helper</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> ExemploController <span style="color: #000000; font-weight: bold;">extends</span> Zend_Controller_Action
<span style="color: #009900;">&#123;</span>
    protected <span style="color: #000088;">$_flashMessenger</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> init<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;">// Coloca o helper na variável de instância _flashMessenger</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_flashMessenger <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_helper<span style="color: #339933;">-&gt;</span><span style="color: #004000;">getHelper</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FlashMessenger'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">initView</span><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: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> atualAction<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;">// O método addMessage() adiciona uma mensagem</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_flashMessenger<span style="color: #339933;">-&gt;</span><span style="color: #004000;">addMessage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Dados salvos com sucesso!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> proximaAction<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;">// O método getMessages() retorna um Array com as mensagens</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mensagens</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_flashMessenger<span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessages</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Na <em>view</em>, você terá todas as mensagens em <strong>$this->mensagens</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2009/01/28/enviar-mensagens-a-uma-nova-requisicao-do-mesmo-controller-do-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Módulos essenciais para um site Drupal</title>
		<link>http://www.rubensgadelha.net/2009/01/26/modulos-essenciais-para-um-site-drupal/</link>
		<comments>http://www.rubensgadelha.net/2009/01/26/modulos-essenciais-para-um-site-drupal/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 01:03:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=119</guid>
		<description><![CDATA[
Neste artigo vou listar alguns módulos que, na minha opinião, são essenciais para o desenvolvimento de um bom portal, apesar de não fazerem parte do core do Drupal.
Content Construction Kit (CCK)
Todo tipo de conteúdo no Drupal, por padrão, é composto de um título e um texto. Com o módulo CCK você poderá adicionar campos personalizados [...]]]></description>
			<content:encoded><![CDATA[<div class="PostContent">
<p>Neste artigo vou listar alguns módulos que, na minha opinião, são essenciais para o desenvolvimento de um bom portal, apesar de não fazerem parte do <em>core</em> do Drupal.</p>
<h3><a href="http://drupal.org/project/cck" target="_blank">Content Construction Kit (CCK)</a></h3>
<p>Todo tipo de conteúdo no Drupal, por padrão, é composto de um título e um texto. Com o módulo CCK você poderá adicionar campos personalizados sob a forma de <em>campos texto</em>, <em>comboboxes</em>, <em>checkboxes</em>, entre outros.</p>
<h3><a href="http://drupal.org/project/views" target="_blank">Views</a></h3>
<p>As views constróem consultas de modo que você possa montar listas, blocos e tabelas apenas informando o tipo de conteúdo, campos, ordenação, quantidade de itens por página, etc.</p>
<h3><a href="http://drupal.org/project/contemplate" target="_blank">Content Template (Contemplate)</a></h3>
<p>Cria um template para exibição de cada tipo de conteúdo. Na página de criação do template serão disponibilizadas todas as variáveis disponíveis e com exemplos de valores, de modo que você só precisará “encaixá-las” no código HTML.</p>
<h3><a href="http://drupal.org/project/fckeditor" target="_blank">FCKEditor</a></h3>
<p>O editor de textos mais famoso e completo da web irá substituir as <em>textareas</em> convencionais, facilitando a formatação de blocos de texto e tornando a sua edição bem mais prática, uma vez que as tags HTML são geradas automaticamente.</p>
<h3><a href="http://drupal.org/project/imagecache">Imagecache</a></h3>
<p>Permite a geração de imagens com base nas enviadas por campos de <em>upload</em>. Essas cópias poderão ser redimensionadas, cortadas, convertidas em preto e branco, etc. A configuração é muito simples e intuitiva, você cria padrões pré-configurados e a partir daí todas as imagens estarão disponíveis sob estes formatos, mesmo as que foram enviadas antes da criação desses padrões.</p>
<h3><a href="http://drupal.org/project/imagefield" target="_blank">Imagefield</a></h3>
<p>É um <em>widget</em> para o <em>CCK</em> que possibilita validação de dimensões e upload de imagens via AJAX no formulário de criação de conteúdo, com visualização em miniatura logo após processado o envio.</p>
<h3><a href="../2009/01/26/modulos-essenciais-para-um-site-drupal/upal.org/project/filefield" target="_blank">Filefield</a></h3>
<p>Funciona de forma bem semelhante ao <em>Imagefield</em>, porém é indicado para o envio de outros tipos de arquivos.</p>
<h3><a href="http://drupal.org/project/pathauto" target="_blank">Pathauto</a></h3>
<p>Gera url’s automaticamente baseando-se na data, título, usuário de criação entre outros. A forma como as url’s são geradas é totalmente configurável. <strong>Dica:</strong> renomeie o arquivo<strong> i18n-ascii.example.txt</strong> para <strong>i18n-ascii.txt</strong>, depois, visite a página  <em>http://www.seusite.com/admin/build/path/pathauto</em>, clique em <em>“Configurações Gerais”</em>, e marque a opção <em>“Converter strings em letras e números da ASCII-96″</em>. Isso irá assegurar que as url’s geradas não possuam caracteres <em>não-ASCII</em>.</p>
<h3><a href="http://drupal.org/project/pngfix" target="_blank">Pngfix</a></h3>
<p>A solução para a incompatibilidade do nosso “querido” Internet Explorer 6 com imagens PNG de 24 bits.</p>
<h3><a href="http://drupal.org/project/transliteration" target="_blank">Transliteration</a></h3>
<p>Corrige os nomes dos arquivos enviados, retirando caracteres inválidos. Sem este módulo, você não poderá visualizar os arquivos cujos nomes possuam acentos, espaços…</p>
<h3><a href="http://drupal.org/project/webform" target="_blank">Webform</a></h3>
<p>Criação de formulários personalizados com envio via email, gravação em Banco de Dados e <em>download</em> de relatórios.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2009/01/26/modulos-essenciais-para-um-site-drupal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Erros de upload de arquivos no Drupal</title>
		<link>http://www.rubensgadelha.net/2009/01/23/erros-de-upload-de-arquivos-no-drupal/</link>
		<comments>http://www.rubensgadelha.net/2009/01/23/erros-de-upload-de-arquivos-no-drupal/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 03:30:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=103</guid>
		<description><![CDATA[Alguns cuidados devem ser observados para que o módulo de upload do Drupal funcione de forma esperada:
Conceder permissão de escrita à pasta de destino
Quando fizer o upload do site para um servidor Linux, não esquecer de dar permissão de escrita (777) na pasta que receberá os arquivos do upload (por padrão, sites/default/files). Faça o mesmo [...]]]></description>
			<content:encoded><![CDATA[<p>Alguns cuidados devem ser observados para que o módulo de upload do Drupal funcione de forma esperada:</p>
<h3>Conceder permissão de escrita à pasta de destino</h3>
<p>Quando fizer o upload do site para um servidor Linux, não esquecer de dar permissão de escrita (777) na pasta que receberá os arquivos do upload (por padrão, <em>sites/default/files</em>). Faça o mesmo para a pasta de arquivos temporários (que você configura em Administrar-&gt;Configurações do Site-&gt;Sistema de Arquivos);</p>
<h3>Corrigir os nomes dos arquivos ou instalar um módulo que o faça</h3>
<p>O <em>Core</em> do Drupal por si só não trata nomes de arquivos que contenham caracteres inválidos e não-ASCII (de acordo com a  <a rel="nofollow" href="http://www.ietf.org/rfc/rfc2396.txt" target="_blank">RFC 2396</a>). Esses arquivos, ao serem enviados ao servidor, perdem seus nomes originais (pela perda dos caracteres inaceitáveis) ficando assim inacessíveis.</p>
<p>Para solucionar esse problema e não ter que renomear esses arquivos manualmente, a <a href="http://www.unleashedmind.com/" target="_blank">Unleashed Mind</a> mantém um módulo chamado <a href="http://drupal.org/project/transliteration" target="_blank">Transliteration</a>, que checa os nomes dos arquivos no ato do upload e os renomea automaticamente. Considero este módulo essencial e está presente em todos os meus projetos feitos em Drupal. Recomendo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2009/01/23/erros-de-upload-de-arquivos-no-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework + Dojo Toolkit</title>
		<link>http://www.rubensgadelha.net/2009/01/22/zend-framework-dojo-toolkit/</link>
		<comments>http://www.rubensgadelha.net/2009/01/22/zend-framework-dojo-toolkit/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 03:18:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Zend]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=72</guid>
		<description><![CDATA[Inúmeros fatores e ideais em comum levaram a equipe de desenvolvimento do Zend Framework a firmarem uma parceria com o Dojo Toolkit, como forma de garantir ótimos recursos para aplicações web como funções para Ajax e widgets para criação de interfaces com o usuário.
Para iniciar o uso do Dojo com em sua aplicação com Zend, [...]]]></description>
			<content:encoded><![CDATA[<p>Inúmeros fatores e ideais em comum levaram a equipe de desenvolvimento do <a href="http://framework.zend.com/" target="_blank">Zend Framework</a> a firmarem uma parceria com o <a href="http://dojotoolkit.org/" target="_blank">Dojo Toolkit</a>, como forma de garantir ótimos recursos para aplicações web como funções para Ajax e <em>widgets</em> para criação de interfaces com o usuário.</p>
<p>Para iniciar o uso do Dojo com em sua aplicação com Zend, baixe o pacote do <a title="Download Dojo Toolkit" href="http://download.dojotoolkit.org/current-stable/" target="_blank">Dojo Toolkit</a> e descompacte-o na sua pasta <em>public</em>, no diretório de javascripts. Se você estiver utilizando a estrutura de diretórios do Zend Studio, ficará assim:</p>
<p><img class="size-full wp-image-95 alignnone" title="pasta_dojo" src="http://www.rubensgadelha.net/wp-content/uploads/2009/01/pasta_dojo.gif" alt="pasta_dojo" width="166" height="173" /></p>
<p>Repare que o pacote é composto por três pastas: <em>dijit</em>, <em>dojo</em> e <em>dojox</em>.</p>
<p><a href="http://dojotoolkit.org/projects/core" target="_blank">Dojo:</a> É o core do framework, possui todas as funções de Ajax, seleção de elementos por CSS, utilitários de linguagem, JSON entre várias outras.</p>
<p><a href="http://dojotoolkit.org/projects/dijit" target="_blank">Dijit:</a> Conjunto de <em>widgets</em> com os quais poderão ser criadas interfaces web 2.0 bastante interessantes. Se você não quiser utilizar os estilos prontos (<em>skins</em>), poderá criar o seu facilmente. Exemplos de <em>widgets</em>: paleta de cores, barras de status, janelas e alertas personalizados, campos de formulários personalizados e muito mais!</p>
<p><a href="http://dojotoolkit.org/projects/dojox" target="_blank">Dojox:</a> Pacote de extensões para o Dojo, como gráficos e ferramentas de desenho.</p>
<p>Feito isso, iremos habilitá-lo no <em>header</em> do nosso layout (no meu caso, <em>main.phtml</em>):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// Checa se o Dojo está ativo no Zend Framework</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Configura o caminho para o arquivo do core do dojo</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setLocalPath</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">baseUrl</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/scripts/dojo/dojo.js'</span><span style="color: #009900;">&#41;</span>
  <span style="color: #666666; font-style: italic;">// Configura alguns parâmetros opcionais do Dojo</span>
  <span style="color: #666666; font-style: italic;">// como parse após o carregamento da página</span>
  <span style="color: #666666; font-style: italic;">// e configuração dos idiomas padrão</span>
  <span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDjConfig</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'parseOnLoad'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'extraLocale'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pt-br'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'en-us'</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #666666; font-style: italic;">// Seleciona o tema 'tundra'</span>
  <span style="color: #339933;">-&gt;</span><span style="color: #004000;">addStyleSheetModule</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dijit.themes.tundra'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span> dojo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">javascriptCaptureStart</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
  // Se você desejar criar funções javascript extras,
  // deverá colocá-las aqui
<span style="color: #000000; font-weight: bold;">&lt;?php</span> dojo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">javascriptCaptureEnd</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// Insere as configurações acima no html</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Agora, na tag header, insira a classe relacionada à skin que você selecionou:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>body <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tundra&quot;</span><span style="color: #339933;">&gt;</span></pre></div></div>

<p>Pronto! Agora você poderá utilizar as funções do Dojo normalmente, mas fique atento: alguns recursos requerem configurações adicionais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2009/01/22/zend-framework-dojo-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erro ao submeter formulário que possui código php no Drupal</title>
		<link>http://www.rubensgadelha.net/2009/01/20/erro-ao-submeter-formulario-que-possui-codigo-php-no-drupal/</link>
		<comments>http://www.rubensgadelha.net/2009/01/20/erro-ao-submeter-formulario-que-possui-codigo-php-no-drupal/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 21:03:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.rubensgadelha.net/?p=77</guid>
		<description><![CDATA[Ao gravar os dados de um formulário que contenha código PHP, você poderá se deparar com o seguinte erro:
A requisição não pode ser processada!
O servidor não suporta a ação requisitada pelo seu “browser”.
Se você acredita ter encontrado um problema no servidor, por favor entre em contato com o webmaster.
Erro 501
Isso acontece por que o mod_security [...]]]></description>
			<content:encoded><![CDATA[<p>Ao gravar os dados de um formulário que contenha código PHP, você poderá se deparar com o seguinte erro:</p>
<blockquote><p><strong>A requisição não pode ser processada!</strong></p>
<p>O servidor não suporta a ação requisitada pelo seu “browser”.</p>
<p>Se você acredita ter encontrado um problema no servidor, por favor entre em contato com o webmaster.</p>
<p><strong>Erro 501</strong></p></blockquote>
<p>Isso acontece por que o <em>mod_security</em> do Apache não está permitindo a postagem do conteúdo em PHP via formulário.</p>
<p>A solução para este problema é a desativação deste módulo ou a criação de uma regra para o chamado <em>“PHP INJECTION”</em>.</p>
<p>Se você tiver acesso a essa configuração, poderá desabilitar esse filtro colocando as seguintes linhas no seu arquivo <em>.htaccess</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Desabilita o filtro do mod_security
</span>
SecFilterEngine Off
SecFilterScanPOST Off</pre></div></div>

<p>Se o erro persistir, é por que somente o pessoal da empresa de hospedagem tem permissões para fazer esse tipo de ajuste.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rubensgadelha.net/2009/01/20/erro-ao-submeter-formulario-que-possui-codigo-php-no-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Code -->
