Скорость Apache - getTemplate (). как передать строку / объект вместо файла .VM

Скорость Apache - getTemplate (). На самом деле это позволяет передать имя файла .vm, могу ли я передать здесь строку / объект? есть ли какой-либо метод для передачи строки / объекта?


person vasantharajan    schedule 29.06.2011    source источник
comment
Возможный дубликат Как использовать строку в качестве шаблона скорости?   -  person Toparvion    schedule 18.04.2017


Ответы (3)


Это пример кода, который у меня работает.
Velocity version: 1.7
Я использую log4j в качестве регистратора.

import org.apache.log4j.Logger;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.resource.loader.StringResourceLoader;
import org.apache.velocity.runtime.resource.util.StringResourceRepository;


private static void velocityWithStringTemplateExample() {
    // Initialize the engine.
    VelocityEngine engine = new VelocityEngine();
    engine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute");
    engine.setProperty("runtime.log.logsystem.log4j.logger", LOGGER.getName());
    engine.setProperty(Velocity.RESOURCE_LOADER, "string");
    engine.addProperty("string.resource.loader.class", StringResourceLoader.class.getName());
    engine.addProperty("string.resource.loader.repository.static", "false");
    //  engine.addProperty("string.resource.loader.modificationCheckInterval", "1");
    engine.init();

    // Initialize my template repository. You can replace the "Hello $w" with your String.
    StringResourceRepository repo = (StringResourceRepository) engine.getApplicationAttribute(StringResourceLoader.REPOSITORY_NAME_DEFAULT);
    repo.putStringResource("woogie2", "Hello $w");

    // Set parameters for my template.
    VelocityContext context = new VelocityContext();
    context.put("w", "world!");

    // Get and merge the template with my parameters.
    Template template = engine.getTemplate("woogie2");
    StringWriter writer = new StringWriter();
    template.merge(context, writer);

    // Show the result.
    System.out.println(writer.toString());
}
person George Siggouroglou    schedule 03.03.2016
comment
можем ли мы использовать загрузчик ресурсов класса вместе с загрузчиком ресурсов String? - person Asad Shakeel; 04.05.2020


загляните в StringResourceLoader

person Nathan Bubna    schedule 29.06.2011
comment
Я нашел один пример для StringResourceLoader. velocity.apache.org/ движок / devel / apidocs / org / apache / velocity /. Но у нас есть информация о нашем шаблоне в строковом формате. нам нужно передать строку вместо .vm. что мне делать для этого сценария. пожалуйста, если есть какой-либо пример кода. - person vasantharajan; 01.07.2011
comment
StringResourceLoader позволяет вам напрямую добавлять шаблоны в ваш репозиторий, а затем извлекать их, как любой другой шаблон. StringResourceLoader.getRepository (). PutStringResource (myTemplateName, myTemplateString); - person Nathan Bubna; 01.07.2011
comment
StringResourceLoader.getRepository() возвращает ноль. Есть ли какое-нибудь свойство для установки? - person Asad Shakeel; 04.05.2020
comment
Был долгое время. Вероятно, следует настроить VelocityEngine для его использования и сначала инициализировать движок такими свойствами: resource.loader = string string.resource.loader.class = org.apache.velocity.runtime.resource.loader.StringResourceLoader. - person Nathan Bubna; 05.05.2020