我想从我的Spring MVC控制器返回一个模型,该模型对我应用程序中的所有页面都是可见的。
所以,我需要一个返回一些用户详细信息的变量。 这是我的代码:
@RequestMapping(value = "/*", method = RequestMethod.GET)
public void status(Model model){
Authentication auth = SecurityContextHolder.getContext()
.getAuthentication();
String username = auth.getName();
Manager mgr = managerService.findOne(username);
model.addAttribute("buget", mgr.getTeam().getTeamBuget());
}
在我的jsp页面中,我写了这样的东西:
<li> <c:out value="${buget}" /> <span class="glyphicon glyphicon-euro"></span></li>
我希望能够在我的应用中打印每个页面中的$ {buget}。
所以,我的方法不起作用,我的页面中没有出现任何内容和最大的问题 对我来说,我没有得到任何可以帮助我的例外或错误。谁可以帮我提一些建议?
答案 0 :(得分:3)
我不完全确定你要做的是什么。您的意思是希望buget
成为您点击的每个页面的一部分吗?如果是这样,您必须将其插入模型中。根据您的代码,我假设您错误地认为无论您点击什么页面都会调用status
。 Spring将解析为最具体的处理程序,因此如果你在另一个更具体的控制器中有另一个处理程序方法,Spring将使用它。但是,即使你所拥有的那个被召唤,Spring怎么会知道它必须接下来调用最具体的一个呢?那么如何将与页面相关的模型属性添加到模型中呢?
如果您希望buget
成为每个回复的一部分,可以使用@ControllerAdvice
(请参阅here了解更多详情的博文):
@ControllerAdvice
public class BugetControllerAdvice {
@ModelAttribute
public void addBugetToModel(Model model) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
Manager mgr = managerService.findOne(username);
model.addAttribute("buget", mgr.getTeam().getTeamBuget());
}
}
Spring现在将在每个控制器中的每个处理程序方法之前调用此方法。您还可以查看Spring Reference以获取更多信息。