代码之家  ›  专栏  ›  技术社区  ›  Vivin Paliath

在springmvc3中截取视图/响应

  •  4
  • Vivin Paliath  · 技术社区  · 14 年前

    我是springmvc3的新手,我了解基本概念。我能够做一些简单的事情,比如创建控制器、服务和视图。不过,我还没有涉足更先进的领域。因此,如果这个问题看起来很愚蠢(或不可能),我道歉。

    我想知道是否有一种方法可以截取视图和/或响应,并在将其发送到客户端之前对其进行修改?我想这就是Spring执行数据绑定的方式,在输出到客户机的过程中形成元素。我想做的是检查域类中元素的注释,并根据这些注释修改视图。这将涉及向响应中注入新代码(HTML或Javascript)。

    更新

    当我进一步思考这个问题时,我意识到最终的呈现是由JSP完成的。所以我想问题是,是否有一种方法可以在模型移到页面之前截取它,并找出bean上绑定数据的注释。

    有办法吗?

    2 回复  |  直到 14 年前
        1
  •  9
  •   Affe    14 年前

    你可能要找的班级是 org.springframework.web.servlet.HandlerInterceptor 您可以在该接口上实现postHandle方法,并且如签名所示,您可以访问请求和响应,以及控制器创建的模型对象的映射(控制器本身,这就是 Object handler 参数为。)

    您可以通过将它们添加到DispatcherServlet中的处理程序映射来“启用它们”。

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <list>
                <bean class="a.package.MyHandlerInterceptor"/>
            </list>
        </property>
    </bean>
    

    编辑: 要回答您的编辑,是的,这是您有机会抓取模型对象并进一步处理它的地方,在控制器完成之后,但在它进入JSP呈现之前。所以你可以做一些像添加myCustomScript到 ModelMap ${myCustomScript} <head> 在jsp中,从 模型图

        2
  •  5
  •   Bozho    14 年前

    • springmvc拦截器(在 mvc docs )-您可以定义 preHandle / postHandle
    • spring aop -定义在给定控制器的方法之前/之后执行的方面
    • servlet过滤器-这是最不理想的选项,因为它没有与spring集成-您不能注入依赖项。