[SPRING] 스프링 부트 - 여러 템플릿 위치
SPRING스프링 부트 - 여러 템플릿 위치
나는 Spring이 src / main / resource / templates /뿐만 아니라 다른 위치에있는 템플릿을 찾길 원한다.
여기 내가 가지고있는 것
@Configuration
public class WebConfig{
@Autowired
private SpringTemplateEngine templateEngine;
@PostConstruct
public void clientTemplate(){
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setPrefix("static/client");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setOrder(templateEngine.getTemplateResolvers().size());
resolver.setCacheable(false);
templateEngine.addTemplateResolver(resolver);
}
}
하지만 기존의 템플릿 index.html / src / main / resources / static / client에 접근하려고하면 다음과 같은 결과가 나옵니다.
java.lang.IllegalArgumentException: ApplicationContext has not been initialized in resource resolver. TemplateResolver or ResourceResolver might not have been correctly configured by the Spring Application Context.
at org.thymeleaf.util.Validate.notNull(Validate.java:37)
at org.thymeleaf.spring4.resourceresolver.SpringResourceResourceResolver.getResourceAsStream(SpringResourceResourceResolver.java:81)
at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:221)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
at org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
at org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:190)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1257)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
이 문제를 해결하는 방법?
해결법
-
==============================
1.현재 설정을 사용하면 @Bean 메서드가 아닌 SpringResourceTemplateResolver의 인스턴스를 생성하게됩니다. 따라서 Spring에 의해 선택되지 않고 ApplicationContext (예)를 제공해야합니다.
현재 설정을 사용하면 @Bean 메서드가 아닌 SpringResourceTemplateResolver의 인스턴스를 생성하게됩니다. 따라서 Spring에 의해 선택되지 않고 ApplicationContext (예)를 제공해야합니다.
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setApplicationContext(applicationContext); resolver.setPrefix("/WEB-INF/templates/"); resolver.setTemplateMode(TemplateMode.HTML);
resolver.setApplicationContext (applicationContext)를 주목하십시오;
아마도 그렇게 할 필요가없는 예제를 보았을 것이지만, @Bean 메소드에서 SpringResourceTemplateResolver 인스턴스를 만드는 것이 가장 확실합니다. Spring은 그것을 선택하고 애플리케이션 컨텍스트를 설정한다 (예제) :
@Bean public ITemplateResolver templateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setPrefix("/WEB-INF/templates/"); resolver.setSuffix(".html"); resolver.setTemplateMode(TemplateMode.HTML); resolver.setCacheable(false); return resolver; }
-
==============================
2.ThymeLeaf는 템플릿 분석기가 @Bean으로 정의되지 않은 경우 이동합니다. WebConfig 클래스를이 클래스로 바꿀 수 있습니다.
ThymeLeaf는 템플릿 분석기가 @Bean으로 정의되지 않은 경우 이동합니다. WebConfig 클래스를이 클래스로 바꿀 수 있습니다.
@Configuration public class WebConfig{ @Bean public ITemplateResolver templateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setPrefix("static/client"); // For Spring Boot // resolver.setPrefix("classpath:/templates/"); resolver.setSuffix(".html"); resolver.setTemplateMode("HTML5"); resolver.setCacheable(false); return resolver; } }
새 템플릿이 선택되어 템플릿 확인자 목록에 추가되어 "templateEngine.addTemplateResolver ()"와 동일한 작업이 수행됩니다.
from https://stackoverflow.com/questions/39414055/spring-boot-multiple-template-location by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @ContextConfiguration으로 ApplicationContext를로드하지 못했습니다 (클래스 = {...}). (0) | 2019.04.27 |
---|---|
[SPRING] Jax-ws, Spring 및 SpringBeanAutowiringSupport (0) | 2019.04.27 |
[SPRING] Spring MVC로 URL의 유효성을 검사하는 가장 좋은 방법은? (0) | 2019.04.27 |
[SPRING] 스프링 데이터에서 AND 및 여러 OR 매개 변수 방법을 수행하는 방법 JPA (0) | 2019.04.27 |
[SPRING] CDI가 비활성화 된 @ PostConstruct에 대한 Glassfish 4 검사 (0) | 2019.04.27 |