springmvc重定向传值,springmvc实现重定向
00-1010,重定向时携带参数。1.添加属性2。添加FlashAttributeredirect重定向3路(带参数)。重定向重定向过程1。response.sendRedirect重定向重定向跳转2。ViewResolver直接跳转。3.ModelAndView重定向
00-1010重定向是Spring MVC中常用的实现重定向的方法。但是,每个使用场景都有自己的要求。如果只是简单的页面跳转,显然不能满足所有要求。例如,重定向时,需要拼接url中的参数,或者返回的页面需要传递模型。SpringMVC用RedirectAttributes解决了这两个需求。
首先,重定向在控制器中可以通过以下方式实现:
返回新的modeland view(" redirect :/index ");或者
返回“redirect :/index”;此时,如果只重定向到一个URL或者一个简单的地址,可以直接拼接,不需要RedirectAttributes,比如返回“redirect :/index?”param1=value1 ";
但这似乎有点太简单粗暴了,参数太多很容易让代码可读性差。使用RedirectAttributes设置重定向页面的参数,SpringMVC会自动拼接url。
接下来,我们主要介绍这个对象的两个方法:
目录
@RequestMapping(/save )公共字符串save(User user,redirect attributes redirect attributes){ redirect attributes . add attribute( param , value 1 );返回“redirect :/index”;}请求/保存后跳转到/index,会在url处拼接?param=value1 .
在redirect重定向的时候携带参数问题
@RequestMapping(/save )公共字符串save(User user,redirect attributes redirect attributes){ redirect attributes . addflashattribute( param , value 1 );返回“redirect :/index”;}请求/save后跳转到/index,可以通过index对应的模板中的一个表达式得到返回值,比如jsp中的jstl使用${param}。该值实际上保存在会话中,并将在下次重定向请求时被删除。
这是对RedirectAttributes中两种方法的简单介绍。
00-1010在Spring MVC中提交表单form函数时,需要在服务器端进行重定向和跳转,防止用户的客户端在后退或刷新时重复提交,其中重定向就是直接跳转到其他页面。重定向有以下三种方式。
00-1010客户向服务器发送请求,服务器匹配servlet,与请求转发相同。servlet完成处理后,它调用sendRedirect()方法,这是响应方法。因此,当servlet完成处理时,它会看到response.senRedirect()方法,并立即将该响应返回给客户机。响应行告诉客户端,您必须发送另一个访问test.jsp的请求。客户端收到这个请求后,会立即发送一个新的请求来请求test.jsp。在这里,这两个请求互不干扰,相互独立。前一个请求中setAttribute()的任何东西都不能在后续的请求中获得。可以看到,sendRedirect()中有两个请求和两个响应。
1. addAttribute
@ request mapping(value=/test redirect ,method={ RequestMethod。POST,RequestMethod。GET }) public ModelAndView testr
edirect(HttpServletResponse response){ response.sendRedirect("/index"); return null; }
2. ViewResolver直接跳转
不带参数
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET }) public String testredirect(HttpServletResponse response){ return "redirect:/index"; }
带参数
@RequestMapping("/testredirect")public String testredirect(Model model, RedirectAttributes attr) { attr.addAttribute("test", "51gjie");//跳转地址带上test参数 attr.addFlashAttribute("u2", "51gjie");//跳转地址不带上u2参数 return "redirect:/user/users";}
使用RedirectAttributes的addAttribute方法传递参数会跟随在URL后面,如上代码即为http:/index.action?test=51gjie
使用addFlashAttribute不会跟随在URL后面,会把该参数值暂时保存于session,待重定向url获取该参数后从session中移除,这里的redirect必须是方法映射路径,jsp无效。你会发现redirect后的jsp页面中b只会出现一次,刷新后b再也不会出现了,这验证了上面说的,b被访问后就会从session中移除。对于重复提交可以使用此来完成.
spring mvc设置下RequestMappingHandlerAdapter 的ignoreDefaultModelOnRedirect=true,这样可以提高效率,避免不必要的检索。
3. ModelAndView重定向
不带参数
@RequestMapping(value="/restredirect",method = { RequestMethod.POST, RequestMethod.GET }) public ModelAndView restredirect(String userName){ ModelAndView model = new ModelAndView("redirect:/main/index"); return model; }
带参数
@RequestMapping(value="/toredirect",method = { RequestMethod.POST, RequestMethod.GET }) public ModelAndView toredirect(String userName){ ModelAndView model = new ModelAndView("/main/index"); model.addObject("userName", userName); //把userName参数带入到controller的RedirectAttributes return model; }
小结一下:
1.redirect重定向可以跳转到任意服务器,可以用在系统间的跳转。
2.Spring MVC中redirect重定向,参数传递可以直接拼接url也可以使用RedirectAttributes来处理,由于是不同的请求,重定向传递的参数会在地址栏显示,所以传递时要对中文编码进行处理。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。