Spring MVC(十一)--使用字符串实现重定向

Spring MVC中有两种重定向方式:

  • 通过返回字符串,字符串必须以redirect:开头;
  • 通过返回ModelAndView;

重定向的时候如果需要给重定向目标方法传参数,要分字符串参数和pojo对象参数两种,先来总结一下通过返回字符串重定向的方式。

直接模拟一种场景:我在页面点击下一步按钮,会跳转到新的页面,中间通过重定向传递一些参数,如下图:

我的第一个页面:

点击右下角的下一页按钮之后,跳转到下面的页面:

将重定向传递过来的参数显示在第一个方块中指定的位置,这就是需要实现的功能,下面是编码过程。页面的代码省略,只贴重要部分。

1、给按钮绑定请求事件

// 点击下一页进行跳转
    $("#nextPage").click(function() {
        window.location.href = "../jump/ToNextPage";
    });

2、创建控制器

第一步中的请求路径是../jump/ToNextPage,所以首先需要创建一个控制器,它的访问路径为/jump,然后创建一个方法,它的访问路径为并ToNextPage ,并在此方法中实现重定向功能。

@Controller
@RequestMapping("/jump")
public class JumpController {

    /**
     * 通过返回字符串实现重定向 注意??:通过Model传递字符串参数
     *
     * @param model
     * @return
     */
    @RequestMapping("ToNextPage")
    public String jumpToNextPage(Model model) {
        model.addAttribute("username", "Spring MVC");
        model.addAttribute("msg", "Welcome to my house");
        return "redirect:./nextPage";
    }

    @RequestMapping("nextPage")
    public ModelAndView nextPage(String username, String msg) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("userName", username);
        mv.addObject("msg", msg);
        mv.setViewName("jump/jump");
        return mv;
    }
}

上面代码中红色加粗部分为重点:

  • Model model:使用Model数据模型传递字符串参数;
  • redirect:./nextPage:返回字符串,字符串以redirect:开头时,Spring MVC会将它视为重定向处理;
  • String username,String msg:重定向到的方法中接受参数时直接使用字符串接受,且参数名称就是在数据模型Model中定义的key;

在重定向之后的方法中,将获取到的参数渲染到了视图jump中,这样就能在视图中获取这两个参数了。

3、在重定向页面获取传递的参数

<div class="simple public">
    <p style="text-align: center;">字符串重定向</p>
    <p>Hello ${userName },${msg }</p>
</div>

上面代码中红色加粗的部分就是获取通过重定向传递过来的参数。

4、测试

上面传递的参数为

  • username:Spring MCV
  • msg:Welcome to my house

查看结果:

从上面的结果中可以看出:

  • 点击下一页之后URL变成了重定向的路径,并且带有参数;
  • 在之前要显示参数的位置获取到了传递过来的参数;

所以重定向成功。在上面的重定向过程中,传递的参数是个字符串,而且只能用Model数据模型传递,有时候需要传递一个pojo对象,但是HTTP的重定向参数是以字符串传递的,在Spring MVC中可以使用RedirectAttributes对象的addFlashAttribute传递pojo对象,它的原理是将数据保存在session中,重定向之后将其清除。

5、重定向传递POJO对象

还是上面的场景,只不过这次将重定向参数改为pojo对象,代码如下:

@Controller
@RequestMapping("/jump")
public class JumpController {

    @RequestMapping("ToNextPage1")
    public String jumpToNextPage1(RedirectAttributes ra) {
        Param param = new Param();
        param.setParamName("Spring MVC");
        param.setParamDesc("欢迎加入");
        ra.addFlashAttribute("param", param);
        return "redirect:./nextPage1";
    }

    @RequestMapping("nextPage1")
    public ModelAndView nextPage(Param param) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("userName", param.getParamName());
        mv.addObject("msg", param.getParamDesc());
        mv.setViewName("jump/jump");
        return mv;
    }
}

上面代码中红色加粗的部分是重点:

  • RedirectAttributes ra:通过这个对象的addFlashAttribute方法传递pojo对象参数;
  • 在重定向后的方法中直接接受一个pojo对象即可;

看一下页面跳转情况

从结果可以看出,跳转之后URL为重定向之后的路径,虽然路径中不带有参数但是pojo参数传递成功了!

6、总结

上面的例子使用返回字符串的方式演示了Spring MVC中的重定向过程,以及重定向过程中传递参数的方法,需要注意以下几点:

  • 返回字符串重定向时,字符串中必须含有redirect,最好是以redirect开头;
  • 传递字符串参数使用Model数据模型;传递pojo参数使用RedirectAttributes类中的addFlashAttribute方法;
  • 不能同时使用两种方式传递参数;

原文地址:https://www.cnblogs.com/hellowhy/p/9745922.html

时间: 2024-09-30 15:50:32

Spring MVC(十一)--使用字符串实现重定向的相关文章

spring mvc返回json字符串的方式

spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring-servlet.xml文件中配置如下代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans&quo

关于 Spring MVC 返回 json 字符串

Spring MVC 返回 json 字符串的几种方式: 1.通过 @ResponseBody 注解自动将返回对象转为 json,这种方法需要 jackson-core.jar 等相关 jar 包支持,项目如果通过 maven 管理,直接在 maven 中加入依赖: ,这样在 maven 依赖中会新增完整的三个 jar 包: 2.在 spring-MVC 配置文件中进行默认视图配置: 3.借助其他 json 工具进行转换:比如可以使用 gson 来完成转换,当然这种方式也得需要 gson 的相关

Spring MVC controller间跳转 重定向 传参 (转)

鸣谢:http://blog.sina.com.cn/s/blog_a85398ce0101f93x.html 1. 需求背景 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 2. 解决办法 需求有了肯定是解决办法了,一一解决,说明下spring的跳转方式很多很多,我这里只是说一些自我认为好用的,常用的,spring分装的一些类和方法. (1)我在后台一个controller跳转到另一个

Spring MVC controller间跳转 重定向 传参

1. 需求背景 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 2. 解决办法 需求有了肯定是解决办法了,一一解决,说明下spring的跳转方式很多很多,我这里只是说一些自我认为好用的,常用的,spring分装的一些类和方法. (1)我在后台一个controller跳转到另一个controller,为什么有这种需求呢,是这样的.我有一个列表页面,然后我会进行新增操作,新增在后台完成之后我

spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable

1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(value = { "/actor_details" }, method = { RequestMethod.POST }) @ResponseBody public ResultObject actorDetails(@RequestBody ActorDetailsRequest req)

spring mvc 删除返回字符串中值为null的字段

在spring的配置文件中进行一下配置: <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter

spring mvc 重定向加传参

常用: ModelAndViewi: return new ModelAndView("redirect:/toList");  或者 ii:return "redirect:/toList"; 或者 iii:response.sendRedirect("index.html"); 1. 需求背景    需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页

spring mvc 请求转发和重定向

spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景    需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 本来以为挺简单的一件事情,并且个人认为比较常用的一种方式,一百度全都有了,这些根本不是问题,但是一百度居然出乎我的意料

spring MVC 使用 modelAndView.setViewName(&quot;forward:*.action&quot;) 发送重定向

1.Servlet重定向forward与redirect: 使用servlet重定向有两种方式,一种是forward,另一种就是redirect.forward是服务器内部重定向,客户端并不知道服务器把你当前请求重定向到哪里去了,地址栏的url与你之前访问的url保持不变.redirect则是客户端重定向,是服务器将你当前请求返回,然后给个状态标示给你,告诉你应该去重新请求另外一个url,具体表现就是地址栏的url变成了新的url. 2.ModelAndView重定向: 使用Spring MVC