Cómo llamar a un método Java desde una plantilla de Velocity

Un objeto se puede establecer en el contexto de la plantilla Velocity. Ese Objeto puede ser llamado desde la plantilla usando su nombre.

Ejemplo:

Supongamos que queremos que la plantilla llame al método hello del objeto de ejemplo del VelocityJavaMethodExample.

public class VelocityJavaMethodExample {

	public String hello( String input ){
		return "Hello " + input;
	}
}

1- Crea el siguiente archivo java:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;

public class VelocityJavaMethodRun {

	public static void main(String[] argv){

		// Source directory
		String sourceDirectory = "V:/tmp/velocity/";
		
		
		// Create the velocity engine
        VelocityEngine ve = new VelocityEngine();
        
        ve.setProperty( "resource.loader", "file");
        ve.setProperty( "file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
        ve.setProperty( "file.resource.loader.path", sourceDirectory);
        ve.setProperty( "file.resource.loader.cache", true);
        ve.setProperty( "file.resource.loader.modificationCheckInterval", "2");

        ve.init();		
		
        // Get the template
        Template t = ve.getTemplate( "example3.vm" );

        // Create the Context
        VelocityContext context = new VelocityContext();
        context.put("MyVariable", new VelocityJavaMethodExample() );

        try {
	        // Create the output file
	        Writer out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream( new File( sourceDirectory + "example3.txt" ) ), "UTF8") );
	    	
	        t.merge( context, out);
	        
	        out.close();
        } catch ( Exception e ){
        	e.printStackTrace();
        }
	}
	
}

Cree la siguiente plantilla llamada example3.vm:


이것은 시험이다.

Llame al método de Java: $MyVariable.hello( $input )


El resultado será:

이것은 시험이다.

Llame al método de Java: Hello World

Referencias

Java 8
Velocity user-guide
Velocity Project