Привет, у меня есть шаблон, который использует макет по умолчанию и fragemnt для заголовка и меню. То, что я пытаюсь сделать, это определить URL текущей страницы, чтобы я мог добавить требуемый CSS, чтобы показать активный.
Я пробовал th: classappend = "@ {''} == 'find-all'? 'Active': ''", однако это всегда отображает текущий путь как пустой (т. Е. Текущую страницу). Я также попытался $ {# request.getCurrentPath} с ошибкой, сообщающей, что не могу найти значение или имеет значение null.
URL-адрес / find-all, поэтому он должен обнаружить это и применить CSS, но, похоже, он не работает.
Код HTML-фрагмента ниже:
<div class="header" th:fragment="header">
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<a class="navbar-brand" th:href="@{/}">Time Keeping/Time Sheets</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar" aria-controls="navbar"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item" th:classappend="@{''} == 'find-all'? 'active': ''">
<a class="nav-link" th:href="@{/find-all}">Find All</a>
</li>
<li class="nav-item">
<a class="nav-link" th:href="@{/add-new-entry}">Add new Time Entry</a>
</li>
</ul>
</div>
</nav>
фрагмент зависимостей Maven,
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Как указано ниже, это только один из используемых контроллеров.
@Controller
public class HomeController {
private static final String currentMonthName = LocalDateTime.now().getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH);
private final TimeKeepingEntryService service;
public HomeController(TimeKeepingEntryService service) {
this.service = service;
}
@GetMapping("/")
public Mono<String> index(Model model) {
model.addAttribute("metaTitle", "Time Keeping Application");
model.addAttribute("month", currentMonthName);
model.addAttribute("timeEntries", service.findByMonth(currentMonthName));
return Mono.just("index");
}
}