The command #parse is used to include a velocity tempalte in a template. The context of the first template is passed to the sub template.
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 VelocitySimple2 {
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( "example2.vm" );
// Create the
VelocityContext context = new VelocityContext();
context.put("name", "World");
try {
// Create the output file
Writer out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream( new File( sourceDirectory + "example2.txt" ) ), "UTF8") );
t.merge( context, out);
out.close();
} catch ( Exception e ){
e.printStackTrace();
}
}
}
Hello $name!
#parse("example2include.vm")
Your name is $name.
Hello World!
Your name is World.
The code first initilize the VelocityEngine using the file resource loader. It set the loader path to the directory contening the templates. Then it gets a template from the template directory using the getTemplate method. A set of variables is set in the VelocityContext, here it's name = World, that context is then passed to the merger method that generate the output files. The variables defined as $name as replaced in the template.