在Spring MVC 3中拦截视图/响应
问题内容:
我是Spring MVC
3的新手,我了解基本概念。我能够做一些简单的事情,例如创建控制器,服务和视图。但是,我还没有涉足更高级的领域。因此,对于这个问题似乎很愚蠢(或不可能),我深表歉意。
我想知道是否有办法在将视图和/或响应发送给客户端之前对其进行拦截和修改?我想这就是Spring在执行到客户端的途中如何执行数据绑定以形成表单元素的方式。我想做的是检查域类中元素的注释,并根据这些注释修改视图。这将涉及在响应中注入新代码(HTML或Javascript)。
更新
当我对此进行更多思考时,我意识到最终的渲染是由JSP完成的。因此,我想问题是,是否存在一种方法可以在模型移至页面之前对其进行拦截,并找出要绑定数据的bean上的注释。
有没有办法做到这一点?
问题答案:
您可能正在寻找的类是org.springframework.web.servlet.HandlerInterceptor
您可以在该接口上实现postHandle方法,并且如签名所示,可以访问请求和响应以及控制器创建的模型对象的映射。(以及控制器本身,这就是Object handler
参数。)
您可以通过将它们添加到调度程序Servlet中的处理程序映射中来“打开它们”。
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<bean class="a.package.MyHandlerInterceptor"/>
</list>
</property>
</bean>
顺便说一下,绑定实际上是在HandlerAdapter内完成的,该HandlerAdapter在定位Controller方法并调用它们的过程中,它不是拦截器。
编辑:要回答您的编辑,是的,您可以在控制器完成之后但在进行JSP渲染之前,有机会抓住模型对象并对其进行更多操作。所以,你可以不喜欢加myCustomScript的ModelMap
折腾${myCustomScript}
在<head>
你的JSP中,得到了支持对象出来的ModelMap
,并检查它,等等等等。