如何使用Velocity API获取静态(非模板)内容?

时间:2011-11-23 12:35:35

标签: java velocity

Velocity API提供了一种按名称获取模板的方法(然后使用Velocity的资源管理器加载)。是否有类似的方法来获取静态内容?

鉴于VelocityEngine,您可以获得如下模板:

Template template = velocityEngine.getTemplate("/path/to/resource.vm");

但没有这样的事情:

ContentResource content = velocityEngine.getContent("/path/to/resource.png");

后一种方法由底层VelocityInstance提供,但VelocityEngine不会公开它。是否有另一种获取静态内容的方法?

1 个答案:

答案 0 :(得分:0)

您可以实现自己的资源加载器,并使用它来加载常规资源以及速度模板。

首先你应该创建一个扩展org.apache.velocity.runtime.resource.loader.ResourceLoader的类 (例如“ com.mycomp.MyLoader ”)

其次,您应该配置您的速度引擎以使用新的资源加载器:

VelocityEngine ve = new VelocityEngine();
ve.setProperty("MyLoader.resource.loader.class","com.mycomp.MyLoader");
ve.setProperty("resource.loader","MyLoader,file");

属性resource.loader告诉Velocity可用的加载器名称。文件” 是默认加载器。 当调用ve.getTemplate时,Velocity将遍历加载器列表。首先它将调用您的自定义加载程序(MyLoader)。如果找不到资源,它将使用默认文件加载器查找它。

第三, 您可以使用MyLoader加载您想要的任何文件。 (不仅是速度模板) 你可以使用:

MyLoader loader = new MyLoader();
loader.getResourceStream("/path/to/resource.png")