【问题标题】:What's the recommended way to implement generic functionality on spring MVC?在 Spring MVC 上实现通用功能的推荐方法是什么?
【发布时间】:2013-08-02 16:56:12
【问题描述】:

假设我想在 ASP.NET 端做与 Masterpage 的代码相同的事情。我目前正在学习 Spring MVC,并且我正在使用 JSP 作为我的观点。我知道对于 JSP 方面,每次创建页面时,我都会包含 header.jsp 和 footer.jsp。

假设我的 header.jsp ${ItemsQty} 中有这个变量,我必须在所有控制器请求映射中都使用这个变量才能插入值。

model.addAttribute("ItemsQty", ItemsServices.count());

设置此值的正确方法是什么?在所有控制器,所有请求方法中添加属性?

问候。

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    您可以创建一个拦截器,将属性添加到模型映射。拦截器可以映射到您喜欢的任何 URL。

    <mvc:annotation-driven>
        <mvc:interceptors>
            <mvc:mapping path="/items/**" />
            <bean="my.package.items.ItemsInterceptor"/>
        </mvc:interceptors>
    </mvc:annotation-driven>
    

    当 url 匹配映射 /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());
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      设置此值的正确方法是什么?在所有控制器,所有请求方法中添加属性?

      没有。这些属性是会话范围的属性。会话范围属性在 Spring MVC 中使用@SessionAttributes 指定。所以在你的情况下,它会是

      @SessionAttributes({"ItemsQty"})
      

      因此,当您第一次将“ItemsQty”添加到模型时,它会一直留在那里(跨越多个请求),直到调用 SessionStatus.setComplete()

      【讨论】:

        猜你喜欢
        • 2011-08-08
        • 2022-12-11
        • 2012-08-12
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 2021-09-16
        相关资源
        最近更新 更多