您可以配置速度以使用类路径中的工具箱文件吗?

时间:2011-12-01 17:54:10

标签: spring velocity

我使用带有Spring配置的VelocityViewResolver的spring

<bean id="velocityViewResolver"  class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
    <property name="order" value="1" />
    <property name="suffix" value=".vm" />
    <property name="contentType" value="text/html;charset=UTF-8" />
    <property name="exposeSpringMacroHelpers" value="true" />
    <property name="toolboxConfigLocation" value="/WEB-INF/velocityToolbox.xml" />
</bean>

如果velocityToolbox.xml文件位于WEB-INF下,则此方法有效;但是我试图把它放在类路径中。有办法吗?

我已经尝试将toolboxConfigLocation指定为“classpath:/wherever/velocityToolbox.xml”,但它找不到资源,我最终没有配置工具箱,并且在运行时出现NPE(出于某种原因,似乎比如代码期望位置以'/'开头,或者在查找资源之前添加'/'本身。

鉴于资源是使用ServletContext.getResourceAsStream定位的,toolboxConfigLocation属性的内容前缀为“/”,有没有办法可以在我的spring配置中“定义”一个资源,以某种方式“指向”一个实际的类路径资源?

欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

我认为它必须是一条完整的道路,例如:

/WEB-INF/classes/com/myapp/resources/toolbox.xml

ServletToolboxManager#getInstance(ServletContext context,String toolboxConfigLocation)方法用于生成使用工具箱配置的ToolboxManager,以便创建VelocityToolboxView中使用的ChainedContext。

如果路径不存在,则此方法使用'/'预先附加路径,然后使用ServletContext#getResourceAsStream(String path)将其读入。

考虑到这一点,如果您将其设置为来自上下文根的完整路径,您将获得成功。