Как получить адрес текущей страницы, используя тимелиф? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь пометить текущий элемент в меню, используя bootstrap и «активный» класс, но я не знаю, как получить значение текущей страницы. Это моя навигационная панель:

<nav class="navbar navbar-expand-md sticky-top navbar-ligth bg-fadded">
  <a class="nav-link waves-effect waves-light" th:href="@{/}">
    <img class="home-logo" alt="UTL-2" th:src="@{/static/img/site-logo.png}" /></a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
  <div class="collapse navbar-collapse justify-content-center" id="navbarSupportedContent">
    <ul id="myDIV" class="navbar-nav mr-auto">
      <li class="nav-item" th:classappend="${module == 'login' ? 'active' : ''}">
        <a class="nav-link waves-effect waves-light" th:href="@{/login}">Вход
                        <span class="sr-only">(current)</span></a>
      </li>

      <li class="nav-item" th:classappend="${module == 'plan' ? 'active' : ''}">
        <a class="nav-link waves-effect waves-light" th:href="@{/plan}">График <br/>отгрузки</a>
      </li>

      <li class="nav-item" th:classappend="${module == 'orders' ? 'active' : ''}">
        <a class="nav-link waves-effect waves-light" th:href="@{/orders}">Заявки</a>
      </li>

      <li class="nav-item" th:classappend="${module == 'stations' ? 'active' : ''}">
        <a class="nav-link waves-effect waves-light" th:href="@{/stations}">Справочник <br/>станций</a>
      </li>

      <li class="nav-item">
        <a class="nav-link waves-effect waves-light" th:href="@{/partner}">Справочник <br/>контрагентов</a>
      </li>

      <li class="nav-item">
        <a class="nav-link waves-effect waves-light" th:href="@{/map}">Карта</a>
      </li>

      <li class="nav-item">
        <a class="nav-link waves-effect waves-light" th:href="@{/info}">Информация</a>
      </li>

      <li class="nav-item" sec:authorize="hasRole('ADMIN')">
        <a class="nav-link waves-effect waves-light" th:href="@{/admin}">Панель <br/>администратора</a>
      </li>

    </ul>

    <div id="logged-in-info">
      <span sec:authorize="isAuthenticated()">Hello, <b sec:authentication="name">(Anonimous)</b></span>
      <!--<span th:text="${#authentication.getPrincipal().getUsername()}"></span>-->

      <form sec:authorize="isAuthenticated()" method="post" th:action="@{/logout}">
        <input type="submit" class="btn btn-light" value="Logout" />
      </form>
      <form sec:authorize="isAnonymous()" method="post" th:action="@{/login}">
        <input type="submit" class="btn" value="Login" />
      </form>
    </div>
  </div>

</nav>

И я пытаюсь использовать эту конструкцию для добавления «активного» класса th:classappend="${module == 'login' ? 'active' : ''}", но атрибут модуля я должен поместить в класс контроллера для каждой страницы. Есть ли какое-то решение, чтобы получить имя текущей активной страницы и поставить этот код вместо атрибута «модуль»?

P.S. Я уже нашел некоторые решения, использующие javascript, чтобы пометить выбранный элемент как активный, но он работает, пока страница не обновится, но каждая ссылка ведет на другую страницу, и элемент в меню больше не является «активным».

1 Ответ

1 голос
/ 24 апреля 2019

Вы можете попробовать этот способ, используя httpservletrequest:

<ul id="myDIV" class="navbar-nav mr-auto">
      <li class="nav-item">
        <a th:class="${#httpServletRequest.requestURI == 'YOURPREFEREDADDRESS'} ? 'active nav-link' : 'nav-link'" th:href="@{/login}">Вход
                        <span class="sr-only">(current)</span></a>
      </li>
.
.
.
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...