Блок Switch или If не выполняет блок по условию, а обрабатывает все блоки подряд
<!-- Main Content -->
<main class="main">
<div th:switch="${contentName}">
<div th:case="'home'" th:replace="~{fragments/contents/home_content :: home_content}"></div>
<div th:case="'about'" th:replace="~{fragments/contents/about_content :: about_content}"></div>
<div th:case="'courses'" th:replace="~{fragments/contents/courses_content :: courses_content}"></div>
<div th:case="'trainers'" th:replace="~{fragments/contents/trainer_content :: trainer_content}"></div>
<div th:case="'events'" th:replace="~{fragments/contents/event_content :: event_content}"></div>
<div th:case="'contact'" th:replace="~{fragments/contents/contact_content :: contact_content}"></div>
<div th:case="*">Контент не найден</div>
</div>
</main>
Мой switch, а так же if вызывает все контенты подряд но мне бы хотелось чтобы он вызвал конкретный по условию блок. Вот мой контроллер:
@Controller
public class PageController {
@GetMapping("/")
public String homePage(Model model) {
model.addAttribute("pageTitle", "Home");
model.addAttribute("contentName", "home");
return "main";
}
@GetMapping("about")
public String aboutPage(Model model) {
model.addAttribute("pageTitle", "About Us");
model.addAttribute("pageDescription", "Описание... которое я добавлю позже...");
model.addAttribute("contentName", "about");
return "main";
}
@GetMapping("courses")
public String coursesPage(Model model) {
model.addAttribute("pageTitle", "Courses");
model.addAttribute("pageDescription", "Описание... которое я добавлю позже...");
model.addAttribute("contentName", "courses");
return "main";
}
@GetMapping("trainers")
public String trainersPage(Model model) {
model.addAttribute("pageTitle", "Trainers");
model.addAttribute("pageDescription", "Описание... которое я добавлю позже...");
model.addAttribute("contentName", "trainers");
return "main";
}
@GetMapping("events")
public String eventsPage(Model model) {
model.addAttribute("pageTitle", "Events");
model.addAttribute("pageDescription", "Описание... которое я добавлю позже...");
model.addAttribute("contentName", "events");
return "main";
}
@GetMapping("contact")
public String contactPage(Model model) {
model.addAttribute("pageTitle", "Contact");
model.addAttribute("pageDescription", "Описание... которое я добавлю позже...");
model.addAttribute("contentName", "contact");
return "main";
}
}
Каждый контент я проверил, в коде нет не единой ошибки, ни лишней точки с запятой, ни его отсутствие. ChatGPT так же не видит ошибки. Я решил проблема с Thymeleaf, но я всё уже сделал и обновил и всё остальное. Я не знаю html5 может проблема в этом, поэтому решил написать сюда.
Ответы (1 шт):
Отдельная благодарность @AlekseiGaile за эту ссылку: https://stackoverflow.com/questions/29657648/thymleaf-switch-statement-with-multiple-case
Решение:
<div th:if="${contentName} eq 'home'">
<th:block th:replace="~{fragments/contents/home_content :: home_content}"></th:block>
</div>
<div th:if="${contentName} eq 'about'">
<th:block th:replace="~{fragments/contents/about_content :: about_content}"></th:block>
</div>
<div th:if="${contentName} eq 'courses'">
<th:block th:replace="~{fragments/contents/course_content :: course_content}"></th:block>
</div>
<div th:if="${contentName} eq 'trainers'">
<th:block th:replace="~{fragments/contents/trainer_content :: trainer_content}"></th:block>
</div>
<div th:if="${contentName} eq 'events'">
<th:block th:replace="~{fragments/contents/event_content :: event_content}"></th:block>
</div>
<div th:if="${contentName} eq 'contact'">
<th:block th:replace="~{fragments/contents/contact_content :: contact_content}"></th:block>
</div>
Я так и не разобрался в чём дело, но точно знаю не в операторе IF. Но подозреваю, что проблема была связана с тегами. Но я Back-end, а не Front-end