直接贴代码吧。我在myeclipse下面新建了一个web项目,我的java代码是这样的。
- Java code
package template; import java.io.StringWriter; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; public class HelloVelocity { public static void main(String[] args) { VelocityEngine ve=new VelocityEngine(); //初始化velocity模板引擎 ve.init(); Template template=ve.getTemplate("hellovelocity.vm"); //创建上下文,填充数据 VelocityContext context=new VelocityContext(); context.put("name", "world"); StringWriter writer=new StringWriter(); template.merge(context, writer); System.out.println(writer.toString()); } }
和这个java类相同的包下面有一个velcity模板文件hellovelocity.vm,代码如下:
- Java code
Hello $name, this is Velocity working!
将两个jar包也导入了,分别是velocity-1.7.jar和velocity-1.7-dep.jar
但是运行的时候,总是报这个错误。如下所示:
- Java code
2012-7-11 22:03:03 org.apache.velocity.runtime.log.JdkLogChute log 严重: ResourceManager : unable to find resource 'hellovelocity.vm' in any resource loader. Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'hellovelocity.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 template.HelloVelocity.main(HelloVelocity.java:15)
总是提示找不到资源文件。很郁闷,明明是放在同一个包下面的。不知道什么原因啊,请遇到过类似问题的大虾赐教啊!
------解决方案--------------------
Template template=ve.getTemplate("hellovelocity.vm");
路径是错误的吧?你可以改用绝对路径测试
Template template=ve.getTemplate("d:\\hellovelocity.vm");
------解决方案--------------------
通过下面这种方式获取资源文件吧,设置一些属性值。
- Java code
Properties p = new Properties(); p.setProperty("resource.loader", "class"); p.setProperty("class.resource.loader.class","org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); //设置资源加载器器为ClasspathResourceLoader,这段可以写到配置文件中 ... VelocityEngine ve = new VelocityEngine(); ve.init(p); template = ve.getTemplate("/templates/hello.vm");