zoukankan      html  css  js  c++  java
  • Spring MVC 中的 forward 和 redirect 的问题

    转自:https://blog.csdn.net/x_iya/article/details/71308022

    我们都知道,在一般情况下,控制器方法返回的字符串都会被当做逻辑视图名来处理。

    但是当字符串带有“forward”或者“redirect”前缀时,则对他们进行特殊处理。把“forward”与“redirect”当成指示符,其后的字符串

    作为URL来处理。

    redirect:会让浏览器发起一个新的请求。

    forward:与当前请求同属一个。


    遇到的一个问题:

    @RequestMapping("/test1")
    public String test1(@ModelAttribute("user") User user) {
        System.out.println("test1  " + user);
        return "forward:/test2";
    }
    
    @RequestMapping("/test2")
    public String test2(ModelMap map) {
        System.out.println("test2  " + map.get("user"));
        return "user/success";
    }

    当我们请求/test1时,被转发到/test2了。

    问题是:我们能够在test2中得到名称为user的User对象吗?

    答案是否定的。

    http://localhost:8080/SM/test1

    test1  User{username='lgh', password='', realName='null'}
    test2  null

    原因:

    1、SpringMVC在调用方法前会创建一个隐含的模型对象implicitModel,作为模型数据的存储容器。如果处理方法的入参为Map或者Model类型,则

    SpringMVC会将implicitModel的引用传递给这些入参。

    所以test1与test2有两个不同的implicitModel,test2不可以获得test1的implicitModel。

    2、对于JSP视图来说,SpringMVC会将模型数据转存到ServletRequest的属性列表中,因为test1与test2同属一个请求,所以,我们在最终的视图页面可以得到

    test1与test2的所有模型数据。

    测试:

    @RequestMapping("/test1")
    public String test1(@ModelAttribute("user") User user) {
        System.out.println("test1  " + user);
        return "forward:/test2";
    }
    
    @RequestMapping("/test2")
    public String test2(ModelMap map) {
        System.out.println("test2  " + map.get("user"));
        map.addAttribute("user1", new User("111", "222", "333"));
        return "user/success";
    }
    访问:http://localhost:8080/SM/test1

    返回:

    User{username='lgh1992314@qq.com', password='', realName='null'}
    User{username='111', password='222', realName='333'}

    当然改为redirect,则只会显示test2里的数据。

  • 相关阅读:
    比较两个集合元素是否相同?
    如何将list集合转成String对象
    如何对金额进行判断
    微信网页授权
    什么是微信小程序?简单介绍
    关于买家买入一件商品以后需要进行的逻辑
    设置快捷的模板的生成
    IDEA优秀插件分享之---Mybatis Log Plugin
    破解Beyond Compare 4
    JPA-save()方法会将字段更新为null的解决方法
  • 原文地址:https://www.cnblogs.com/wei1/p/9582088.html
Copyright © 2011-2022 走看看