如何在Spring中关闭Velocity ViewResolver错误?

时间:2011-02-04 19:43:19

标签: java spring velocity

我正在使用Velocity和Spring。在Spring中,我使用VelocityViewResolverContentNegotiatingViewResolver配对。在大多数情况下,这很有效。唯一的问题是ContentNegotiatingViewResolver使用许多不同的内容集查询VelocityViewResolver(应该如此)。

当Velocity引擎找不到特定模板时,会产生类似于以下内容的错误:

  

2011-02-04 13:37:15,074 ERROR [http-8080-2] VelocityEngine:ResourceManager:无法在任何资源加载器中找到资源'foo.json.vm'。

这不太理想。理想情况下,如果找不到模板,则会产生警告或类似的东西。如果某个特定内容类型的模板不存在,我并不在意......因为这意味着该视图解析器不支持该内容类型。

我是否可以通过VelocityViewResolverVelocityViewContentNegotiatingViewResolver来解决此错误?

3 个答案:

答案 0 :(得分:2)

所以,我发现最好的方法是在我的日志配置文件中添加logger语句,专门用于Velocity引擎(Velocity和我的项目都使用Commons日志记录)。我的记录器语句如下所示:

<logger name="org.apache.velocity.app">
    <level value="OFF" />
</logger>

答案 1 :(得分:1)

这是因为您的ContentNegotiatingViewResolver使用了VelocityViewResolver。你可以通过给它一个空的(但非空)视图解析器列表来阻止它这样做。

<bean
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    ...
    <property name="viewResolvers">
          <list />
    </property>
</bean>

答案 2 :(得分:1)

问题将在Spring 3.2中修复,请参阅SPR-8640。完成此改进后,您将能够配置Velocity视图解析程序,以仅检查一次未解析的视图。