Foreach in Apache Velocity con ArrayList

This page was exported from - JPinup
Export date: Fri Jun 2 2:17:59 2017 / +0000 GMT
Foreach in Apache Velocity con ArrayList
Velocity è un template engine basato su Java. Velocity può essere usato per generare le pagine web, SQL, PostScript e altri tipi di
file a partire da modelli definiti. Abbiamo introdotto questo engine in un altro articolo. Vediamo ora come gestire le liste istanziate
nelle classi Java e stampare valori restituiti da metodi definiti negli oggetti.
Vediamo come creare un progetto semplice che rappresenti alcuni animali presenti in una fattoria con:
- Interfaccia "Animale" con metodo getVerso(), che sarà invocato da Velocity
- Classe Gatto, che implementa Animale
- Classe Cane, che implementa Animale
- Classe Gallina, che implementa Animale
STEP 1
Da Eclipse bisogna creare un nuovo Maven Project (se si vuole questa natura), con il nome desiderato.
Il pom dovrà contenere la dipendenza delle librerie di Velocity, come di seguito:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>it.jpinup.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
</project>
STEP 2 - Classi e interfaccia
- Crea l'interfaccia Animale
package it.jpinup.entity.interfaccia;
public interface Animale {
public String getVerso();
}
- Crea le altre classi
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 1/4 |
This page was exported from - JPinup
Export date: Fri Jun 2 2:17:59 2017 / +0000 GMT
Cane
package it.jpinup.entity.animali;
import it.jpinup.entity.interfaccia.Animale;
public class Cane implements Animale{
public String getVerso() {
// TODO Auto-generated method stub
return "bau";
}
}
Gatto
package it.jpinup.entity.animali;
import it.jpinup.entity.interfaccia.Animale;
public class Gatto implements Animale{
public String getVerso() {
// TODO Auto-generated method stub
return "miao";
}
}
Gallina
package it.jpinup.entity.animali;
import it.jpinup.entity.interfaccia.Animale;
public class Gallina implements Animale{
public String getVerso() {
// TODO Auto-generated method stub
return "coccodè";
}
}
STEP 3 - Definire il template Velocity
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 2/4 |
This page was exported from - JPinup
Export date: Fri Jun 2 2:17:59 2017 / +0000 GMT
Creare in resources un file denominato velocity.vm con il seguente testo:
Gli animali presenti allo zoo sono:
#foreach( $animale in $listaAnimali )
$animale.verso
#end
Con foreach abbiamo la possibilità di scorrere la lista passata nel context (spiegato nei punti di seguito). Come si nota, per invocare
il metodo, possiamo evitare di scrivere il prefisso "get".
STEP 4 - Main
Creare una classe Java con metodo main, come di seguito
package velocity;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import it.jpinup.entity.animali.Cane;
import it.jpinup.entity.animali.Gallina;
import it.jpinup.entity.animali.Gatto;
import it.jpinup.entity.interfaccia.Animale;
public class VelocityMain {
public static void main(String[] args) {
List<Animale> animali = new ArrayList<Animale>();
animali.add(new Gatto());
animali.add(new Cane());
animali.add(new Gallina());
VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ve.init();
Template t = ve.getTemplate("template.vm");
VelocityContext context = new VelocityContext();
context.put("listaAnimali", animali);
StringWriter writer = new StringWriter();
t.merge(context, writer);
System.out.println(writer.toString());
}
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 3/4 |
This page was exported from - JPinup
Export date: Fri Jun 2 2:17:59 2017 / +0000 GMT
}
Per passare gli oggetti al template, basta agire sul context di Velocity
VelocityContext context = new VelocityContext();
context.put("listaAnimali", animali);
STEP 4
L'esecuzione presenterà il seguente output:
Gli animali presenti allo zoo sono:
miao
bau
coccodè
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 4/4 |