studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones java scala velocity

java - reales - No se han podido encontrar los recursos de la plantilla de velocidad



libro de android studio en español pdf (11)

Al utilizar embarcadero integrado, la propiedad webapp.resource.loader.path debe comenzar con una barra inclinada:

webapp.resource.loader.path=/templates

de lo contrario, las plantillas no se encontrarán en ../webapp/templates

Solo una aplicación independiente de velocidad simple basada en la estructura Maven. Aquí está el fragmento de código escrito en Scala para representar la plantilla helloworld.vm en la carpeta ${basedir}/src/main/resources :

com.ggd543.velocitydemo import org.apache.velocity.app.VelocityEngine import org.apache.velocity.VelocityContext import java.io.StringWriter /** * @author ${user.name} */ object App { def main(args: Array[String]) { //First , get and initialize an engine val ve = new VelocityEngine(); ve.init(); //Second, get the template val resUrl = getClass.getResource("/helloworld.vm") val t = ve.getTemplate("helloworld.vm"); // not work // val t = ve.getTemplate("/helloworld.vm"); // not work // val t = ve.getTemplate(resUrl.toString); // not work yet //Third, create a context and add data val context = new VelocityContext(); context.put("name", "Archer") context.put("site", "http://www.baidu.com") //Finally , render the template into a StringWriter val sw = new StringWriter t.merge(context, sw) println(sw.toString); } }

cuando compilar y ejecutar el programa, recibí el siguiente error:

2012-1-29 14:03:59 org.apache.velocity.runtime.log.JdkLogChute log 严重: ResourceManager : unable to find resource ''/helloworld.vm'' in any resource loader. Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource ''/helloworld.vm'' at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474) at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352) at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533) at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514) at org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:373) at com.ggd543.velocitydemo.App$.main(App.scala:20) at com.ggd543.velocitydemo.App.main(App.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Process finished with exit code 1



Enfrenté el problema similar con intellij IDEA. puedes usar esto

VelocityEngine ve = new VelocityEngine(); Properties props = new Properties(); props.put("file.resource.loader.path", "/Users/Projects/Comparator/src/main/resources/"); ve.init(props); Template t = ve.getTemplate("helloworld.vm"); VelocityContext context = new VelocityContext();


Enfrenté un problema similar. Estaba copiando las plantillas de correo del motor de velocidad en la carpeta incorrecta. Como JavaMailSender y VelocityEngine se declaran como recursos en MailService , es necesario agregar las plantillas en la carpeta de recursos declarada para el proyecto.

Hice los cambios y funcionó. Pon las plantillas como

src/main/resources/templates/<package>/sampleMail.vm


Gran pregunta: resolví mi problema hoy de la siguiente manera usando Ecilpse:

  1. Coloque su plantilla en la misma jerarquía de carpetas que su código fuente (no en una jerarquía de carpetas separada, incluso si la incluye en la ruta de compilación) como se muestra a continuación:

  2. En su código, simplemente use las siguientes líneas de código (suponiendo que solo desea que la fecha pase como datos):

    VelocityEngine ve = new VelocityEngine(); ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); ve.init(); VelocityContext context = new VelocityContext(); context.put("date", getMyTimestampFunction()); Template t = ve.getTemplate( "templates/email_html_new.vm" ); StringWriter writer = new StringWriter(); t.merge( context, writer );

Vea cómo primero le decimos a VelocityEngine que mire en el classpath. Sin esto, no sabría dónde buscar.


Puedes usarlo así:

Template t = ve.getTemplate("./src/main/resources/templates/email_html_new.vm");

Funciona.


Puse mi .vm en src/main/resources/templates , luego el código es:

Properties p = new Properties(); p.setProperty("resource.loader", "class"); p.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); Velocity.init( p ); VelocityContext context = new VelocityContext(); Template template = Velocity.getTemplate("templates/my.vm");

esto funciona en proyecto web.

En eclipse, Velocity.getTemplate ("my.vm") funciona porque velocidad buscará el archivo .vm en src / main / resources / o src / main / resources / templates, pero en el proyecto web, tenemos que usar Velocity.getTemplate ("templates / my.vm");


Solo una aplicación independiente de velocidad simple basada en la estructura Maven. Aquí está el fragmento de código escrito en Scala para renderizar la plantilla helloworld.vm en

${basedir}/src/main/resources folder:


También puede colocar su carpeta de plantillas en src / main / resources en lugar de src / main / java. Funciona para mí y es una ubicación preferible ya que las plantillas no son fuente de Java.


puedes intentar agregar estos códigos:

VelocityEngine ve = new VelocityEngine(); String vmPath = request.getSession().getServletContext().getRealPath("${your dir}"); Properties p = new Properties(); p.setProperty("file.resource.loader.path", vmPath+"//"); ve.init(p);

¡Hago esto y paso!


VelocityEngine velocityEngin = new VelocityEngine(); velocityEngin.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); velocityEngin.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); velocityEngin.init(); Template template = velocityEngin.getTemplate("nameOfTheTemplateFile.vtl");

podría usar el código anterior para establecer las propiedades de la plantilla de velocidad. Luego puede dar el nombre del archivo tempalte al inicializar la Plantilla y encontrará si existe en la ruta de clase.

Todas las clases anteriores provienen del paquete org.apache.velocity *