This page was exported from - JPinup Export date: Sun Mar 19 21:09:11 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: Sun Mar 19 21:09:11 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: Sun Mar 19 21:09:11 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: Sun Mar 19 21:09:11 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 |