Блок Switch или If не выполняет блок по условию, а обрабатывает все блоки подряд

Рейтинг: 0Ответов: 1Опубликовано: 14.08.2025
<!-- 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 может проблема в этом, поэтому решил написать сюда.

Ответы

▲ 0

Отдельная благодарность @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