如何从我的 Spring MVC 应用程序从同一个控制器方法返回每个页面中的变量?

abt*_*abt 2 java spring jsp spring-mvc

我想从我的 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());
}
Run Code Online (Sandbox Code Playgroud)

在我的jsp页面中,我写的是这样的:

<li> <c:out value="${buget}" /> <span class="glyphicon glyphicon-euro"></span></li>
Run Code Online (Sandbox Code Playgroud)

我希望能够在我的应用程序的每个页面中打印 ${buget}。

所以,我的方法不起作用,我的页面中什么也没有出现,对我来说最大的问题是我没有得到任何可以帮助我的异常或错误。谁能帮我一些建议?

Viv*_*ath 5

我不完全确定你想要做什么。你的意思是你想buget成为你点击的每个页面的一部分吗?如果是这样,您必须将其插入模型中。根据您的代码,我假设您有错误的印象,status无论您点击什么页面,都会被调用。Spring 将解析为最具体的处理程序,因此如果您在另一个更具体的控制器中有另一个处理程序方法,Spring 将使用它。但即使调用了您拥有的那个,Spring 怎么知道它必须调用下一个最具体的一个?那么如何将依赖于页面的模型属性添加到模型中呢?

如果您想buget成为每个回复的一部分,您可以使用@ControllerAdvice(有关更多详细信息的博客文章,请参见此处):

@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());
    }
}
Run Code Online (Sandbox Code Playgroud)

Spring 现在将在每个控制器中的每个处理程序方法之前调用此方法。您还可以查看Spring 参考以获取更多信息。