Элемент отображения Thymeleaf активен при использовании макета - PullRequest
0 голосов
/ 20 ноября 2018

Я хотел, чтобы элемент навигации отображался как активный (класс nav-item active), когда по этому элементу щелкают другие элементы с неактивным классом (nav-item).Я также использую макеты Thymeleaf.

В контроллере у меня есть следующий код

    @GetMapping("/login")
public String getLoginPage(Model model) {
    model.addAttribute("activeLink", "Login");
    return "login";
}

В файле layout.html (этот файл содержит общий колонтитул для всех страниц), у меня естьследующий код

    <nav th:replace="navigation.html :: navibar(activeLink=${activeLink})"></nav>

В файле navigation.html (этот файл имеет только код, связанный с навигацией), у меня есть код, подобный

<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top" th:fragment="navibar(activeLink)">
<a class="navbar-brand" href="/title">Title</a>

<div class="collapse navbar-collapse" id="navbarsExampleDefault">
    <ul class="navbar-nav mr-auto">
        <li th:class="${#strings.equals(activeLink, 'Home')} ? 'nav-item active' : 'nav-item'"><a class="nav-link" href="/">Home<span class="sr-only">(current)</span></a></li>
        <li th:class="${#strings.equals(activeLink, 'Register')} ? 'nav-item active' : 'nav-item'"><a class="nav-link" href="/register">Register</a></li>
        <li th:class="${#strings.equals(activeLink, 'Login')} ? 'nav-item active' : 'nav-item'" sec:authorize="isAnonymous()"><a class="nav-link" th:href="@{/login}">Login <span class="sr-only">(current)</span></a></li>
        <li class="nav-item active" sec:authorize="isAuthenticated()"><a class="nav-link" th:href="@{/logout}">Logout <span class="sr-only">(current)</span></a></li>
    </ul>
</div>

В возвращенном шаблонепо контроллеру (логин), у меня нет каких-либо специальных ссылок для навигационных ссылок.

Приведенный выше код работает, но есть ли более простой способ для активных элементов навигации?Кроме того, если я использую флэш-атрибуты

redirectAttributes.addFlashAttribute("activeLink", "Register");

в контроллере, то функциональность не работает

1 Ответ

0 голосов
/ 20 ноября 2018

Чтобы избежать добавления activeLink к модели, вы можете передавать activeLink при включении фрагмента.

Like:

<div th:replace="nagivation :: navibar('Login')"></div>

Btw.Вы можете удалить .html после имени макета.

...