我有一个Spring + Thymeleaf项目。我有一个标题部分的片段和一些包含标题的页面。
下面是标头片段的(重要部分)。如您所见,它包括activeUserWorkgroup
模型对象
dashboard-header.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<body>
<header th:fragment="dashboard-header" class="header">
....
<div class="navbar-right">
<ul class="nav navbar-nav">
<li class="dropdown notifications-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<span class="user-label" style="margin-left:5px;"
th:text="${activeUserWorkgroup.getWorkgroupLabel()}">
</span>
</a>
</li>
</ul>
</div>
</nav>
</header>
</body>
</html>
在我需要标题片段的每个 Spring 视图中,我都添加了行
<div th:replace="fragments/dashboard-header :: dashboard-header"></div>
问题是,在我需要此标头的每个视图的每个控制器中,我必须为activeUserWorkgroup
模型对象提供适当的值。这既不舒服又容易出错。
有没有办法让 Spring 为activeUserWorkgroup
对象提供正确的模型值,而不必在每个控制器中编写代码?
谢谢
这可能是你要找的。我要做的是创建仅返回模型对象activeUseWorkgroup
的控制器。然后让所有其他控制器扩展它。
@Controller
public ControllerA
{
@ModelAttribute("activeUserWorkgroup")
public Object getActiveUserWorkgroup()
{
return new Object();
}
}
@Controller
public ControllerB extends ControllerA
{
}
最好创建一个控制器建议,阅读此链接中的文档 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html
@ControllerAdvice
public class GlobalControllerAdvice extends ResponseEntityExceptionHandler {
@ModelAttribute("activeUserWorkgroup ")
public String getActiveWorkgroup() {
//YOUR CODE
}
}