假设我想在ASP.NET方面做后面的Masterpage代码做同样的事情。我正在学习Spring MVC,我正在使用JSP来查看我的观点。我知道对于JSP方面,每次创建页面时我都会包含header.jsp和footer.jsp。
让我说我的头文件中有这个var.jsp $ {ItemsQty}我必须在所有控制器请求映射中将其插入以获取值。
model.addAttribute("ItemsQty", ItemsServices.count());
设置此值的正确方法是什么?在所有控制器中添加属性,所有请求方法?
问候。
答案 0 :(得分:0)
设置此值的正确方法是什么?在所有控制器中添加属性,所有请求方法?
没有。这些属性是会话范围的属性。会话范围属性在Spring MVC中使用@SessionAttributes指定。所以在你的情况下它将是
@SessionAttributes({"ItemsQty"})
因此,当您第一次向模型添加“ItemsQty”时,它将保留在那里(跨多个请求),直到调用SessionStatus.setComplete()。
答案 1 :(得分:0)
您可以创建一个拦截器,将属性添加到模型图中。拦截器可以映射到您喜欢的任何URL。
<mvc:annotation-driven>
<mvc:interceptors>
<mvc:mapping path="/items/**" />
<bean="my.package.items.ItemsInterceptor"/>
</mvc:interceptors>
</mvc:annotation-driven>
当网址与映射/items/**
匹配时,此拦截器会在调用处理程序后将属性添加到模型图。
class ItemsInterceptor extends HandlerInterceptorAdapter {
@Autowired
private ItemsServices service;
public void postHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView)
throws Exception {
if (modelAndView != null) {
modelAndView.addObject("ItemsQty", service.count());
}
}
}