速度,不同的模板路径(Velocity, different template paths)

2019-08-01 01:47发布

有谁知道是否有可能从速度不同的路径得到的模板? 初始化速度后拒绝改变“file.resource.loader.path”。

这是我的代码:

public Generator(){         
    Properties p = new Properties();
        p.setProperty("resource.loader", "file");
        p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
        p.setProperty("file.resource.loader.path", "");

    Velocity.init(p);
}

模板可以位于不同的位置(用户可以选择一个与文件对话框)。 所以,我在取出模板出速度有此代码

private Template fetch (String templatePath) {
    out_println("Initializing Velocity core...");
    int end = templatePath.lastIndexOf(File.separator); 

    Properties p = new Properties();
        p.setProperty("file.resource.loader.path", templatePath.substring(0, end));
    Velocity.init(p);

    return Velocity.getTemplate(templatePath.substring(end+1));
}

这是行不通的。 看来,一旦速度被初始化它不能与不同的属性重置。 如何解决这个问题有什么建议?

可能的程序流程:

  1. 用户选择需要被填充到模板组
  2. 用户选择要使用的模板(可以位于任何地方的HDD)
  3. 用户按下产生

Answer 1:

的:速度可以以两种方式使用单模式或单独的实例模型 。 您目前正在使用中,只有一个JVM Velocity引擎的实例允许单模式。

相反,你应该使用单独的实例模型,它允许您以支持不同的模板目录创建在同一个JVM速度的多个实例。

VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, "path/to/templates");
ve.init();
Template t = ve.getTemplate("foo.vm");


Answer 2:

考虑而不是使用单Velocity级创建和初始化新VelocityEngine第3步之前。



Answer 3:

添加到上述几点:

即使一个是使用非单模式,即使用VelocityEngine对象。 多个路径可以通过给逗号分隔值的属性进行配置。

[file.resource.loader.class=path1,path2]

在这种情况下极速引擎将寻找模板路径1,然后再在路径2



Answer 4:

在我来说,我使用速度与Servlet的一个Eclipse动态Web项目。
我不能真正重置路径,但我可以把在/ WebContent文件夹的子目录,然后整理我的模板,这样...和嵌套子目录为好。

RequestDispatcher requestDispatcher = 
 request.getRequestDispatcher("/velocity_templates/index.vm");

这个简单的解决办法是我所需要的......没有必要惹velocity.properties在web.xml中或以编程方式设置它们(在每种情况下,这两种方法都不适合我遗憾的是,当我尝试过)。

需要注意的是,当我做的模板包括具有#parse(..)命令,我需要为我在我的servlet实例代码确实使用的模板.vm文件中相同的路径前缀。



文章来源: Velocity, different template paths
标签: java velocity