Bom, decidi começar a escrever esse blog para compartilhar meus conhecimentos, experiências e mágoas que todos esses anos programando em Java me proporcionaram. Comecemos então pelas mágoas!
Se tem uma coisa que eu
odeio em Java é JSP. Onde já se viu inserir código Java na camada
de View? Ah, mas você pode usar as tag-libs... Aí eu te pergunto,
você já fez um for, if ou criou uma variável usando tag-lib? Tem
que concordar comigo que o negócio é difícil e nem um pouco
intuitivo.
Deixando um pouco bronca de lado, para a minha alegria um
certo dia fui apresentado ao Velocity, e desde então mandei o JSP
pra PQP.
O Velocity é uma
linguagem de template desenvolvida em Java. Ela pode ser usada tanto
para aplicações standalone, que podem ser geradores de relatórios
por exemplo, quanto para aplicações web sendo a camada de view do
MVC.
Para começar vamos
criar uma aplicação standalone simples usando velocity, só para ter uma
noção de como a engine funciona e as suas principais tags de
marcação.
Para construir o
aplicativo vamos usar um projeto maven. Se você não tem a mínima
idéia do que seja isso, chegou a hora de aprender. Tudo o que você
precisa saber está nesse link:
http://maven.apache.org/.
Dentro do nosso pom.xml
você deve, portanto, inserir o velocity como dependencia.
org.apache.velocity
velocity
1.7
Aqui estão os passos
para se criar a aplicação:
-
Criar uma
instância do VelocityEngine
-
Criar um contexto
onde serão inseridos as instâncias de objetos que o template vai
utilizar
-
Carregar um
template
-
Efetuar o merge do
template com o contexto e obter o resultado, que é saída
renderizada.
package com.velocityexemplo;
import java.io.StringWriter;
import java.io.Writer;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
/**
* Hello Velocity!
*
*/
public class App {
public static void main(String[] args) {
VelocityEngine velocity = new VelocityEngine();
velocity.init(ClassLoader.getSystemResource("velocity.properties").getFile());
VelocityContext context = new VelocityContext();
context.put("name", "Fulano");
context.put("lista", new String[]{"Tomate","Cebola", "Macarrão", "Arroz", "Feijão"});
Template template = velocity.getTemplate("hello-velocity.vm");
Writer writer = new StringWriter();
template.merge(context, writer);
System.out.println(writer);
}
}
Na linha 3 você vai
perceber que a engine foi inicializada utilizando um arquivo de
configuração (velocity.properties). Não vou entrar em
detalhes sobre a configuração, que você poderá obter no site
oficial do projeto. A única linha relevante para entender o
funcionamento do programa é essa aqui:
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
Isso significa que os
templates serão carregados a partir do classpath do projeto. Mas
existe a possibilidade de carregá-los através de um diretório
externo no filesystem da máquina.
Enfim... nas linhas
seguintes foram criadas uma variável e um array. E o merge feito com
o template hello-velocity.vm.
Até agora nós apenas
criamos o aplicativo. A parte interessante vem a seguir... o template!
#include('header.vm')
Olá $name!
Aqui está a lista de compras do supermercado.
Lista de compras:
#set($count = 1)
#foreach($item in $lista)
#if($item == 'Arroz')
$count - $item (não esquecer)
#else
$count - $item
#end
#set($count = $count + 1)
#end
#parse('footer.vm')
A instrução
#include, na linha 1, faz a inclusão de outro template.
A linha 3 faz a impressão da variável
$name, incluida no contexto.
A instrução
#set cria uma variável, neste caso um contador.
O
#foreach faz a iteração sobre uma lista de objetos.
A instrução condicional
#if/#elseif/#else é trivial.
E no final o
#parse faz a inclusão de um template, mas diferentemente do
#include, o
#parse interpreta as instruções VLT(Velocity Template Language).
Bom, para um primeito post acho que está de bom tamanho. Para conhecer a fundo as instruções do Velocity, seguem abaixo os links. E no próximo post, minha dupla favorita. Não é o "Victor & Leo", e sim "Struts2 & Velocity".
http://velocity.apache.org/
http://velocity.apache.org/engine/devel/vtl-reference-guide.html
Código fonte:
http://depositfiles.com/files/9marhpe10
Tá tirando, mano? Aqui é Java!