インターセプターを使用して、ユーザーに最後に提示された ModelAndView (またはビューのみ) を追跡することもできます。この例では、最後のモデルとビューのみを追跡しますが、リストを使用してより多くのレベルに戻ることができます。
package com.sample;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LastModelAndViewInterceptor extends HandlerInterceptorAdapter {
public static final String LAST_MODEL_VIEW_ATTRIBUTE = LastModelAndViewInterceptor.class.getName() + ".lastModelAndView";
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
request.getSession(true).setAttribute(LAST_MODEL_VIEW_ATTRIBUTE, modelAndView);
super.postHandle(request, response, handler, modelAndView);
}
}
Spring XML 構成の場合:
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<bean class="com.sample.LastModelAndViewInterceptor"/>
</property>
</bean>
次に、次のコードを使用して、コントローラーでそのビューに戻ります。
ModelAndView mv = (ModelAndView)request.getSession().getAttribute(LastModelAndViewInterceptor.LAST_MODEL_VIEW_ATTRIBUTE);
return mv;