将Freemarker集成到Spring mvc时出错

时间:2014-11-12 04:38:10

标签: java spring-mvc template-engine freemarker

我尝试将Freemarker模板集成到Spring mvc应用程序中。我试过它作为教程中的节目。这是代码, 我正在使用freemarker 2.3.15

servletcontext.xml

 <!-- freemarker config -->
    <beans:bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
      <beans:property name="templateLoaderPath" value="/WEB-INF/views/"/>
    </beans:bean>

    <!--
      View resolvers can also be configured with ResourceBundles or XML files. If you need
      different view resolving based on Locale, you have to use the resource bundle resolver.
    -->
    <beans:bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
      <beans:property name="cache" value="true"/>
      <beans:property name="prefix" value="/WEB-INF/views/"/>
      <beans:property name="suffix" value=".ftl"/>
    </beans:bean>

它会导致错误:

1. Build path is incomplete. Cannot find class file for org/springframework/ui/freemarker/
 FreeMarkerConfigurationFactory

2.No setter found for property 'templateLoaderPath' in class 
 'org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer' [config set: Warehouse/web-context]

2 个答案:

答案 0 :(得分:10)

spring-context-support依赖项添加到项目中。

在pom.xml中,

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>3.2.4.RELEASE</version>
</dependency>

参考:ClassNotFoundException with Freemarker

Spring Freemarker Configuration, Template Not Found

答案 1 :(得分:0)

几年后,我在这里遇到了这个问题。我在网络上找不到任何解决方案。我不知道FreeMarker或Spring库是否已更改或发生了什么。我终于找到了可行的解决方案。

我有以下代码:

@Autowired
private FreeMarkerConfigurationFactoryBean freeMarkerConfigFactory;

当将此jar包含在另一个项目中时,该项目可能突然不再解决此依赖关系。我正在从事的新项目实际上不需要FreeMarker,但是我需要让Spring来解决依赖关系,以便我的程序可以运行。

我注释了以上两行,而是添加了以下内容:

private FreeMarkerConfigurationFactoryBean freeMarkerConfigFactory = new FreeMarkerConfigurationFactoryBean();

这允许我的程序运行,因为Spring不需要自动装配该bean。

为什么不知道为什么它在工作了多年后就停止工作了?另外,我没有测试上面的代码,因为同样,我不需要FreeMarker。我只需要自动布线即可。

也许这将对其他人有所帮助(或者当我五年后再次寻找该解决方案时对我有帮助。因为我已经解决了一次,但是没有将其记录在自述文件中。我必须在代码。)