当前位置: 代码迷 >> Web开发 >> velocity的一个小疑点,大家帮看看哇
  详细解决方案

velocity的一个小疑点,大家帮看看哇

热度:147   发布时间:2012-08-07 14:54:47.0
velocity的一个小问题,大家帮看看哇
直接贴代码吧。我在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");