В настоящее время я настраиваю проект Spring MVC с Thymeleaf, следуя руководству по адресу: http://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html#spring-mvc-configuration
Пытаясь поцеловать код, я сначала заменил implements ApplicationContextAware
и метод установки на @Inject private ApplicationContext applicationContext
. Но я не понимаю, почему я должен вызывать setApplicationContext()
на SpringResourceTemplateResolver
, когда он наследует интерфейс Spring ApplicationContextAware
.
Как этого избежать?
Изменить: если я удалю строку templateResolver.setApplicationContext(applicationContext);
, я получу это исключение при доступе к корню:
java.lang.IllegalArgumentException: Application Context cannot be null
org.thymeleaf.util.Validate.notNull(Validate.java:37)
org.thymeleaf.spring4.templateresource.SpringResourceTemplateResource.<init>(SpringResourceTemplateResource.java:64)
org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver.computeTemplateResource(SpringResourceTemplateResolver.java:69)
org.thymeleaf.templateresolver.AbstractConfigurableTemplateResolver.computeTemplateResource(AbstractConfigurableTemplateResolver.java:1221)
org.thymeleaf.templateresolver.AbstractTemplateResolver.resolveTemplate(AbstractTemplateResolver.java:356)
org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:840)
org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:608)
org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1087)
org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1061)
org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:189)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1257)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Примечание. Я использую последние версии: Spring 4.3.3.RELEASE и Thymeleaf 3.0.2.RELEASE (конечно, я импортировал thymeleaf-spring4
).
ApplicationContextAware
и внедрилиApplicationContext
. Если это не сработает, похоже, есть проблема с жизненным циклом внутри Thymeleaf. - person M. Deinum   schedule 17.11.2016@Inject applicationContext
(и мой класс конфигурации не реализовал ApplicationContextAware). - person maxxyme   schedule 17.11.2016@Bean
, если вы следовали руководству, компонент должен быть компонентом Spring и будет внедрен. Опубликуйте свой класс конфигурации. - person M. Deinum   schedule 17.11.2016@Configuration
может быть источником проблемы. Бинго! Вот и все... - person maxxyme   schedule 17.11.2016