tutorial name example concatenar java velocity

java - name - velocity foreach



¿Cómo usar String como Velocity Template? (3)

El código de ejemplo anterior funciona para mí. Utiliza Velocity versión 1.7 y log4j.

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()); }

Una pregunta similar .

¿Cuál es la mejor manera de crear Velocity Template a partir de una cadena?

Conozco el método Velocity.evaluate en el que puedo pasar String o StringReader, pero me parece curioso que haya una mejor manera de hacerlo (por ejemplo, cualquier ventaja de crear una instancia de Template).


Hay una plantilla de análisis de gastos indirectos. Es posible que vea cierta ganancia de rendimiento al analizar previamente la plantilla si su plantilla es grande y la usa repetidamente. Puedes hacer algo como esto,

RuntimeServices runtimeServices = RuntimeSingleton.getRuntimeServices(); StringReader reader = new StringReader(bufferForYourTemplate); Template template = new Template(); template.setRuntimeServices(runtimeServices); /* * The following line works for Velocity version up to 1.7 * For version 2, replace "Template name" with the variable, template */ template.setData(runtimeServices.parse(reader, "Template name"))); template.initDocument();

Luego puede llamar a template.merge() una y otra vez sin analizarlo cada vez.

Por cierto, puede pasar String directamente a Velocity.evaluate() .


Velocity 2 se puede integrar en el marco JSR223 Java Scripting Language Framework, que ofrece otra opción para transformar cadenas como plantilla:

ScriptEngineManager manager = new ScriptEngineManager(); manager.registerEngineName("velocity", new VelocityScriptEngineFactory()); ScriptEngine engine = manager.getEngineByName("velocity"); System.setProperty(VelocityScriptEngine.VELOCITY_PROPERTIES, "path/to/velocity.properties"); String script = "Hello $world"; Writer writer = new StringWriter(); engine.getContext().setWriter(writer); Object result = engine.eval(script); System.out.println(writer);