DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Gerando código com o FreeMarker

Neste artigo será apresentado o FreeMarker, um poderoso framework de templates, similiar ao famoso Velocity da Jakarta.

 

Neste artigo será apresentado o FreeMarker, um poderoso framework de templates, similar ao famoso Velocity da Jakarta.

 

O FreeMarker é muito utilizado por alguns frameworks Web MVC como a principal tecnologia utilizada na camada de apresentação, substituindo o JSP, que é o caso por exemplo do framework WebWork.

 

Embora muitos utilizem o FreeMarker no lugar do JSP, o seu principal objetivo é ser um simples e rápido framework de templates, o qual pode ser utilizado para automatizar a geração de determinado código. Um exemplo de aplicação que utiliza o FreeMarker com esta finalidade é o HibernateTools, ferramenta bem conhecida dos usuários do Hibernate..

 

Neste artigo será apresentado como escrever um simples template em FreeMarker, e separar a lógica de negócios do “design” do seu template.

FreeMarker

Para rodar o exemplo deste artigo, faça o download do FreeMarker 2.3.8:

 

Þ      http://prdownloads.sourceforge.net/freemarker/freemarker-2.3.8.tar.gz

 

Após fazer o download, coloque o arquivo “freemarker.jar” no classpath do seu projeto.

Utilizando o FreeMarker

A classe abaixo demonstra como utilizar o FreeMarker. O método “parseTemplate” recebe um Map com os parâmetros e o nome do template. O resultado é uma String (texto) com o template processado.

 

É recomendado que seja criado somente uma instância da classe “Configuration”, e para isto uma variável privada e estática foi declarada na classe.

 

Note que a constante “TEMPLATES_FOLDER” define o local onde estão os templates. O valor da constante está fixa no código para facilitar o exemplo.

 

import java.io.File;

import java.io.IOException;

import java.io.StringWriter;

import java.util.Map;

 

import freemarker.template.Configuration;

import freemarker.template.DefaultObjectWrapper;

import freemarker.template.Template;

import freemarker.template.TemplateException;

 

public class FreemarkerUtils {

 

      private static Configuration cfg = new Configuration();

 

      private static final String TEMPLATES_FOLDER = "templates";

     

      public static final String parseTemplate(Map map,String templateName) throws TemplateException, IOException  {

 

            //diretório onde estão templates

            cfg.setDirectoryForTemplateLoading(new File(TEMPLATES_FOLDER));

 

            cfg.setObjectWrapper(new DefaultObjectWrapper());

 

            //recupera o template

            Template t = cfg.getTemplate(templateName);

 

            StringWriter writer = new StringWriter();

 

            /** Freemarker **/

            t.process(map, writer);

 

            writer.flush();

            writer.close();

 

            return writer.toString();

      }

}

Exemplo

Para utilizar a classe anterior, vamos criar um arquivo de template chamado “teste.ftl” na pasta “templates”. Se você estiver usando o Eclipse, a pasta “templates” pode ser criada na raiz do seu projeto:

 

teste.ftl

${data?string("dd/MM/yyyy")}

 

Prezado ${usuario}, segue a lista de produtos:

 

<#list produtos as p>

      - ${p.nome} - R$${p.preco}

</#list>

 

O template acima demonstra como construir um “email” para enviar aos usuários de um sistema. No template, a data atual e o nome do usuário são exibidos, e também uma possível lista de produtos selecionados para este usuário.

 

Para rodar o exemplo crie a classe Produto, conforme abaixo:

 

public class Produto {

      private String nome;

      private double preco;

      public Produto(String nome, double preco) {

            super();

            this.nome = nome;

            this.preco = preco;

      }

      public String getNome() {

            return nome;

      }

      public double getPreco() {

            return preco;

      }

}

 

E finalmente, uma pequena classe que executa o template “teste.ftl”, passando os parâmetros necessários:

 

public class HelloTemplate {

      public static void main(String[] args) throws IOException,TemplateException {

 

            Map map = new HashMap();

            map.put("data", new Date());

            map.put("usuario", "Ricardo");

           

            List produtos = new ArrayList();

            produtos.add(new Produto("Produto A1",300.14));

            produtos.add(new Produto("Produto B2",401.56));

            produtos.add(new Produto("Produto C3",555.77));

            map.put("produtos", produtos);

 

            String s = FreeMarkerUtils.parseTemplate(map, "teste.ftl");

            System.out.println(s);

      }

}

 

A saída do programa pode ser visualizada abaixo:

 

13/11/2006

 

Prezado Ricardo, segue a lista de produtos:

 

      - Produto A1 - R$300.14

      - Produto B2 - R$401.56

      - Produto C3 - R$555.77

Conclusão

O template construído neste artigo, poderia ser um “email” enviado a uma lista de usuários de um sistema. Tente criar um template, onde a saída seja um arquivo HTML, e enviá-lo por email com a API Commons-email descrita neste artigo:

 

http://www.devmedia.com.br/articles/viewcomp.asp?comp=3306

 

O FreeMarker é sem dúvida muito simples, sendo possível utilizá-lo para gerar código, ou até mesmo em aplicações Web, substituindo o JSP na camada de visualização.

 

Referências:

 

Þ      http://freemarker.sourceforge.net/

Þ    http://www.javaworld.com/javaworld/jw-01-2001/jw-0119-freemarker.html?page=2





    1 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Flavio Oliveira Dias
Você não terei o codigo fonte desse projeto já que fiz da maneira que vc indicou mas tenho um erro de não encontrar a pasta templates


em 5/10/2011 08:55 - Responder

 



[Este post ainda não foi associado a uma sequência]
Publicidade
Autor
Ricardo Rodrigues Lecheta

Ricardo Rodrigues Lecheta (ricardolecheta@terra.com.br), é autor do livro “Google Android” - Aprenda a criar aplicações para dispositivos móveis utilizando o Android SDK e possui as certificações SCJP, SCWCD, SCBCD, SCMAD, SCEA.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
1   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03