【发布时间】:2019-04-22 17:48:56
【问题描述】:
我想在单击该元素时将导航元素显示为活动的(导航项活动类),而其他元素具有非活动类(导航项)。我也在使用 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>
在控制器(登录)返回的模板中,我没有任何导航链接特定的代码。
上面的代码可以运行,但是有没有更好更简单的方法来激活导航项? 另外,如果我使用 flash 属性
redirectAttributes.addFlashAttribute("activeLink", "Register");
在控制器中,则功能不起作用
【问题讨论】:
-
您可以传递包含导航模板的 activeLink。那么你就不必将它添加到模型中
-
这是一个不错的选择,谢谢。我可以在每个模板中添加一个布局片段,它会调用 nagivation.html :: navibar()。这样可以避免通过控制器
-
是的。如果您不介意,我会将其添加为答案。
标签: spring spring-boot thymeleaf navigationbar