个删除页面,删除完成后用SpringMVC redirect到列表页面,代码如下:
@RequestMapping(value ="/{id}/delete",method = RequestMethod.GET) public String delete(@PathVariable String id,HttpServletRequest request) { userService.deleteById(id); return "redirect:/user/list"; }
配置有一个全局的拦截器
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (null == modelAndView) { return; } // 系统配置参数 String basePath = HttpUtils.getBasePath(request); String contextPath = HttpUtils.getContextPath(request); modelAndView.addObject("basePath", basePath); modelAndView.addObject("contextPath", contextPath); }
现在的问题是,redirect后的地址栏总是将modelAndView中的参数拼接上了,如下:
http://localhost:8080/macaque/user/list?basePath=http%3A%2F%2Flocalhost%3A8080%2Fmacaque&ssss=%2Fmacaque&contextPath=%2Fmacaque
但是如果用response.sendRedirect("")的话 地址栏正常如下:
http://localhost:8080/macaque/user/list
求助 这是什么原因呢,怎么解决
"redirect:/user/list"; springmvc要自己生成一个modelAndView对象
后置拦截器这里if (null == modelAndView) { return; }就不满足
如果直接用servlet的api:response.sendRedirect("")if (null == modelAndView) { return; }这里的modelAndView就为null了
恩,多谢,可springmvc为什么总会把modelAndView中的参数给拼到地址栏呢……。不想这样啊
@Macaque: 是redirect关键字引起的,重定向后的参数肯定要拼接到url后面,如果请求转发的话估计不会,你可以试试看
springMVC的配置文件注解开关中配置"ignoreDefaultModelOnRedirect"变量为true, 如下:
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true"/>