Thymeleaf игнорирует атрибуты и не обрабатывает страницу
Есть контроллер
@Controller
public class FirstController {
@GetMapping("/hello")
public String helloPage(@RequestParam("name") String name,
Model model){
model.addAttribute("message", name);
return "first/hello";
}
}
И есть view hello.html
<!doctype html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Hello world!</h1>
<p th:text="${message}"></p>
</body>
</html>
Ввожу необходимые параметры:
http://localhost:8080/hello?name=Tom
Но все что выводит страница это "Hello world!"
P.S. Я пока работаю со spring core и поэтому конфиги пришлось писать руками, вот что находиться в конфигах:
@Configuration
@ComponentScan("com.nosferat.springapp")
@EnableWebMvc
public class SpringConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
var viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".html");
return viewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
Может есть какая то связь с конфигом
Ответы (1 шт):
Автор решения: Михаил Ребров
→ Ссылка
Проблема в том, что Ваш Spring ничего не знает о Thymeleaf
Предположу, что когда вы откроете исходный код вашей HTML страницы, то ва там увидите пустой тег
<p th:text="${message}"></p>
Это значит, что он не обработан шаблонизатором.
Для того чтобы Thymeleaf его обработал, необходимо:
- Объявить бин c
SpringTemplateEngineотThymeleaf, который будет обрабатывать шаблоны - Создать бины Template Resolver и
ThymeleafViewResolverс прокинутым в него Template Engine, которые будут находить необходимые шаблоны и передавать их Thymeleaf
Итого:
@Configuration
@ComponentScan("com.nosferat.springapp")
@EnableWebMvc
public class SpringConfig implements WebMvcConfigurer {
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setTemplateEngineMessageSource(messageSource());
return templateEngine;
}
@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setOrder(1);
return viewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
Подробнее можно прочитать в официальных туториалах Thymeleaf+Spring: