[英]Intercept the view/response in Spring MVC 3
我是Spring MVC 3的新手,我理解基本概念。 我能夠做一些簡單的事情,比如創建控制器,服務和視圖。 但是,我還沒有進入更先進的領域。 因此,如果這個問題看起來很愚蠢(或不可能),我會道歉。
我想知道是否有辦法攔截視圖和/或響應並在它發送到客戶端之前修改它? 我想這就是Spring在向客戶端發出的過程中執行數據綁定以形成元素的方式。 我想要做的是檢查域類中元素的注釋,並根據這些注釋修改視圖。 這將涉及在響應中注入新代碼(HTML或Javascript)。
UPDATE
當我想到這一點時,我意識到最終的渲染是由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內部完成的,它定位了Controller方法並調用它們,它不是攔截器。
編輯:要回答您的編輯,是的,您可以在控制器完成之后,但在進入JSP渲染之前,有機會獲取模型對象並使用它。 所以你可以做一些事情,比如將myCustomScript添加到ModelMap
然后在你的jsp的<head>
中拋出${myCustomScript}
,從ModelMap
獲取一個支持對象並檢查它等等。
是的,實際上有很多方法:
preHandle
/ postHandle
方法並將攔截器應用於多個控制器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.