Controller内部使用forward和redirect跳转到另一个Controller如何传参
今天我遇到了一个场景
Controller携带参数内部跳转,就是一个Controller 返回的不是视图,而是另一个页面,这就涉及到参数的传递
内部跳转分两种
第一种,使用forward
return "forward:index.do";
forward的意思就是服务器访问资源,然后吧得到的结果i返回给返回给用户
所以地址栏还是显示的之前的地址
他可以携带的东西,如 request state等信息都会跟着一起传递
如代码
@RequestMapping("/index") private String inindex1(HttpServletResponse response, HttpServletRequest request){ System.out.println(session.getAttribute("javalogin")); return "user/index"; }如以上代码,如果之前的Controller里设置了session,那么在这里是可以正确打印出javalogin的值的
第二种:就是redirect
使用这种方式,就会丢失session或request等信息
redirect是告诉浏览器取请求另外一个地址,所以此时浏览器的地址显示的就是新地址,但是他缺取法保存session或request等信息了
那么应该如何传参呢,我们可以使用RedirectAttributes来传递参数
下面我们看代码
第一个conterller
@RequestMapping(value="/login028888",method=RequestMethod.POST) private String inindex(String userid,String username,String useradmin,RedirectAttributes arr,HttpServletResponse response, HttpServletRequest request){ if(uli.getphp028(userid,username,useradmin)){ arr.addFlashAttribute("javalogin","loginok"); arr.addFlashAttribute("userid",userid); arr.addFlashAttribute("username",username); arr.addFlashAttribute("useradmin",useradmin); }else{ arr.addFlashAttribute("javalogin","loginerror"); } return "redirect:index.do"; }
在index.do里我们可以这样接收参数
@RequestMapping("/index") private String inindex1(HttpServletResponse response, HttpServletRequest request,Map<String,Object> maps){ HttpSession session = request.getSession(); System.out.println("AAAAAAAAA"+maps.get("javalogin")); session.setAttribute("infologin", maps); session.setMaxInactiveInterval(60); return "user/index"; }经过测试,这是正常的,大家可以测试下
当然我们还可以使用RedirectAttributes的这个方法,即 arr.addAttribute(attributeValue) 来传递参数
只是用他来传递参数,在接收才参数的centroller里面就应该这样配置,如代码片段
private String inindex1(String userid,String javalogin,String username,String useradmin){然后直接获取即可
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情