Я хотел бы вызвать макрос, определенный в файле шаблона Velocity, из моего Java-приложения.
Например, я определил следующий макрос в файле шаблона с именем helloworld.vm
:
#macro( print $msg $n )
#foreach( $i in [1..$n] )
Hello ${msg}!
#end
#end
И затем я хотел бы использовать скоростной двигатель для выполнения определенного макроса:
velocityEngine = new VelocityEngine();
velocityEngine.setProperty("resource.loader", "class");
velocityEngine.setProperty("class.resource.loader.class", ClassLoaderResourceLoader.class.getName());
velocityEngine.setProperty("class.resource.loader.classloader", this.classLoader);
velocityEngine.setProperty("class.resource.loader.location", "PATH_TO_TEMPLATE_DIRECTORY");
velocityEngine.init();
velocityContext = new VelocityContext();
StringWriter sw = new StringWriter();
velocityContext.put("msg", "Tom");
velocityContext.put("n", 2);
velocityEngine.invokeVelocimacro("print", "print", new String[]{"msg","n"}, velocityContext, sw);
Который я бы ожидал накормить sw
чем-то вроде:
Hello Tom!
Hello Tom!
Но скорее выдает следующую ошибку:
RuntimeInstance.invokeVelocimacro() : VM 'print' is not registered.
Следовательно, какова процедура регистрации speedMacro или есть ли другой способ вызова макроса Velocity, сохраненного в файле пользовательского шаблона из Java?