三种方式:拦截器、viewresolver、redirect前model.asMap().clear()清除modelmap
1.拦截器中处理
public class CommonModelMapInformationInterceptor implements HandlerInterceptor { // This method is unused as this Interceptor is for post handle only public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } // This method is unused as this Interceptor is for post handle only public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { boolean isRedirectView = modelAndView.getView() instanceof RedirectView; boolean isViewObject = modelAndView.getView() == null; // if the view name is null then set a default value of true boolean viewNameStartsWithRedirect = (modelAndView.getViewName() == null ? true : modelAndView.getViewName().startsWith(UrlBasedViewResolver.REDIRECT_URL_PREFIX)); if(modelAndView.hasView() && ( ( isViewObject && !isRedirectView) || (!isViewObject && !viewNameStartsWithRedirect))){ addCommonModelData(modelAndView); } } public void addCommonModelData(ModelAndView modelAndView){ modelAndView.addObject(“stuff”, “importantStuff”); modelAndView.addObject(“moreStuff”, “moreImportantStuff”); } }
2.viewresolver中处理
我自己用的是继承自InternalResourceViewResolver,
分别介绍两种方式:
1)可以在需要忽略model的时候改用 redirectWithoutModel来做跳转
public class RedirectViewResolver implements ViewResolver, Ordered { // Have a highest priority by default private int order = Integer.MIN_VALUE; // Uses this prefix to avoid interference with the default behaviour public static final String REDIRECT_URL_PREFIX = "redirectWithoutModel:"; public View resolveViewName(String viewName, Locale arg1) throws Exception { if (viewName.startsWith(REDIRECT_URL_PREFIX)) { String redirectUrl = viewName.substring(REDIRECT_URL_PREFIX.length()); return new RedirectView(redirectUrl, true, true, false); } //return null;//此处原文返回空 return super.resolveViewName(viewName, arg1); } public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } }
2)当整个应用都不希望带model跳转,可以更简单的实现
public class RedirectsNotExposingModelUrlBasedViewResolver extends UrlBasedViewResolver { @Override protected View createView(String viewName, Locale locale) throws Exception { View view = super.createView(viewName, locale); if (view instanceof RedirectView) { ((RedirectView) view).setExposeModelAttributes(false); } return view; } }
-----------------------------------------------------------------------------------------------
3.1以后还可以设置ignoreDefaultModelOnRedirect属性为true
相关推荐
- **页面跳转(Redirect After Post)**:处理完请求后,使用`redirect`或`redirectAction`结果,将用户重定向到新的URL,避免回退按钮导致的重复提交。 4. **Struts2配置** 对于以上功能的实现,Struts2的配置...
`redirect()`方法(HttpServletResponse对象的成员方法)则使浏览器发起新的HTTP请求,地址栏会显示新URL,效率相对较低。 11. **XML解析**:DOM(Document Object Model)解析方式会加载整个XML文档到内存,方便...
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。...
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect...