1 24 package org.riotfamily.components.context; 25 26 import javax.servlet.http.HttpServletRequest ; 27 import javax.servlet.http.HttpServletResponse ; 28 29 import org.riotfamily.common.web.util.ServletUtils; 30 import org.riotfamily.components.editor.EditModeUtils; 31 import org.springframework.util.Assert; 32 import org.springframework.web.servlet.HandlerInterceptor; 33 import org.springframework.web.servlet.ModelAndView; 34 import org.springframework.web.util.WebUtils; 35 36 40 public class StoreContextInterceptor implements HandlerInterceptor { 41 42 private static final String HANDLED_ATTRIBUTE = 43 StoreContextInterceptor.class.getName() + ".handled"; 44 45 private static final String CONTEXT_ATTRIBUTE = 46 StoreContextInterceptor.class.getName() + ".context"; 47 48 private static final String STORE_ATTRIBUTE = 49 StoreContextInterceptor.class.getName() + ".storeContext"; 50 51 public boolean preHandle(HttpServletRequest request, 52 HttpServletResponse response, Object handler) throws Exception { 53 54 if (WebUtils.isIncludeRequest(request) && EditModeUtils.isEditMode(request)) { 55 String uri = ServletUtils.getPathWithinApplication(request); 56 PageRequestContext context = PageRequestUtils.createContext(request, uri); 57 request.setAttribute(CONTEXT_ATTRIBUTE, context); 58 } 59 request.setAttribute(HANDLED_ATTRIBUTE, Boolean.TRUE); 60 return true; 61 } 62 63 public void postHandle(HttpServletRequest request, 64 HttpServletResponse response, Object handler, 65 ModelAndView modelAndView) throws Exception { 66 } 67 68 public void afterCompletion(HttpServletRequest request, 69 HttpServletResponse response, Object handler, Exception ex) 70 throws Exception { 71 72 if (request.getAttribute(STORE_ATTRIBUTE) != null) { 73 PageRequestContext context = (PageRequestContext) 74 request.getAttribute(CONTEXT_ATTRIBUTE); 75 76 PageRequestUtils.storeContext(context, request, 120000); 77 } 78 } 79 80 public static void storeContext(HttpServletRequest request) { 81 Assert.notNull(request.getAttribute(HANDLED_ATTRIBUTE), 82 "No context found in request. Make sure you add a " 83 + StoreContextInterceptor.class.getName() 84 + " to your HandlerMapping(s)."); 85 86 request.setAttribute(STORE_ATTRIBUTE, Boolean.TRUE); 87 } 88 89 } 90 | Popular Tags |