我使用带有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配置中“定义”一个资源,以某种方式“指向”一个实际的类路径资源?
欢迎任何想法。
答案 0 :(得分:0)
我认为它必须是一条完整的道路,例如:
/WEB-INF/classes/com/myapp/resources/toolbox.xml
ServletToolboxManager#getInstance(ServletContext context,String toolboxConfigLocation)方法用于生成使用工具箱配置的ToolboxManager,以便创建VelocityToolboxView中使用的ChainedContext。
如果路径不存在,则此方法使用'/'预先附加路径,然后使用ServletContext#getResourceAsStream(String path)将其读入。
考虑到这一点,如果您将其设置为来自上下文根的完整路径,您将获得成功。