什么';我的Spring 3.2/Freemarker配置有什么问题?

什么';我的Spring 3.2/Freemarker配置有什么问题?,spring,spring-mvc,configuration,app-config,freemarker,Spring,Spring Mvc,Configuration,App Config,Freemarker,当我点击Spring 3.2应用程序的/calendar URL时,控制器代码被成功点击,视图“calendar”被设置在ModelAndView对象中 我从spring得到一个错误,无法解析视图“calendar”,它应该指向/WEB-INF/views/calendar.ftl 春季:3.2 自由标记:2.3.20 我知道视图名称设置正确,因为错误是无法解析该视图 我的Java配置: public class YhjInitializer implements WebApplicationI

当我点击Spring 3.2应用程序的/calendar URL时,控制器代码被成功点击,视图“calendar”被设置在ModelAndView对象中

我从spring得到一个错误,无法解析视图“calendar”,它应该指向/WEB-INF/views/calendar.ftl

春季:3.2 自由标记:2.3.20

我知道视图名称设置正确,因为错误是无法解析该视图

我的Java配置:

public class YhjInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    servletContext.addFilter("Sitemesh", yhj.web.filters.SitemeshFilter.class).addMappingForServletNames(null, false, "/*");

    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(MvcConfiguration.class);
    ctx.setServletContext(servletContext);

    DispatcherServlet springServlet = new DispatcherServlet(ctx);
    ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", springServlet);
    servlet.addMapping("/");
    servlet.setLoadOnStartup(1);

    // want to load some data, eg club list for app scope here?
}
}

控制器方法(我很高兴请求命中此方法):

我不认为应用程序的其他方面(如sitemesh)会妨碍诊断,但如果这有助于诊断,我也会分享

错误:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/yhj] threw 
exception [Could not resolve view with name 'calendar' in servlet with name 
'dispatcher'] with root cause javax.servlet.ServletException: Could not resolve view 
with name 'calendar' in servlet with name 'dispatcher'
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
在我看来,控制器中的“日历”似乎没有转换到文件位置“/WEB-INF/views/calendar.ftl”,因此可能是ViewResolver问题

我的配置正确吗

编辑/更新:
刚刚注意到,每次刷新页面时,对/calendar的请求似乎都会发生两次。也许有一些循环引用?

我似乎已经修复了它…至少我现在得到了一个来自FTL的页面呈现

如果有人偶然发现这个问题,我会加上一些注释

所作的修改:

@Bean(name="freemarkerConfig")
public FreeMarkerConfig freeMarkerConfig() {
现在是

@Bean
public FreeMarkerConfigurer freeMarkerConfig() {
注意在返回的类型中添加了“urer”

我几乎删除了此方法中的所有配置,因此该方法现在只是:

FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("/WEB-INF/views/");
return configurer;
总有一天我会恢复原状的

因为我删除了此方法中对配置类的引用,所以我可以重新组织导入,并在类上使用@COnfiguration,而不是完全限定的spring..COnfiguration类

@Bean
public FreeMarkerConfigurer freeMarkerConfig() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("/WEB-INF/views/");
return configurer;