资讯专栏INFORMATION COLUMN

springmvc中controller内方法跳转forward?redirect?

antz / 1517人阅读

摘要:使用的的时候,碰到内方法的跳转的问题,记录下问题以及自己测试的过程。第三种选择使用的的方法来设置值,原理是在跳转前将值放入中,跳转之后就将值清除掉。

使用springmvc的controller的时候,碰到controller内方法的跳转的问题,记录下问题以及自己测试的过程。

场景:

业务执行更新操作之后返回列表页面,列表页面需默认展示查询的列表数据,涉及到两个controller的跳转。

问题

是使用forward还是redirect跳转

解决问题
其实使用forward或者redirect都能达到目的,但是有些问题在下面说明。
1、使用forward
a、例如:return "forward:/rest/queryData",实际的效果是在浏览器中的url地址还是原地址,存在重复提交的问题,所以forward就不推荐使用了。
b、如果是需要携带参数,直接拼接传递的参数,例如:return "forward:/rest/queryShopAlisName?phone=xxxxxxx"; 在跳转的controller中使用参数【@RequestParam("phone") String phone】获得传递的参数值,显然这样的方式也是不推荐的。

2、使用redirect
在controller方法的参数中使用RedirectAttributes来
a、不带参数:
直接使用 return "redirect:/rest/queryShopAlisName";浏览器的地址变成跳转的新地址,避免了重复提交的问题。
b、带参数的时候:

第一种选择:直接在url后面拼接参数,使用@RequestParam来取值,不推荐使用

第二种选择:在controller方法的参数中使用RedirectAttributes来传递参数

    @RequestMapping(value = "/checkMember")
    public String checkMember(HttpServletRequest request, RedirectAttributes attr) {
            Member member = null;
        try {
            String phone = request.getParameter("phone");
            ***attr.addAttribute("phone", "xxxx");***
            member = cashierService.checkIsMember(phone);
        } catch (Exception e) {
            logger.error("query member is error happen : " + e);
        }
        return "redirect:/rest/queryShopAlisName";
    }

使用attr.addAttribute来设置值,然后在跳转的controller中同样使用@RequestParam来取值,在浏览器中同样是拼接参数的形式,例如:http://localhost:8080/xxxx/xx...,同样不建议这么使用。

第三种选择:使用RedirectAttributes的addFlashAttribute的方法来设置值,原理是在跳转前将值放入session中,跳转之后就将值清除掉。浏览器的地址不显示参数的值,推荐使用这种方法来传值。

attr.addFlashAttribute("phone", "xxxxxxx");

在跳转的controller的参数中增加@ModelAttribute来取得参数值

@RequestMapping(value = "/queryShopAlisName")
    public String queryShopAlisName(@ModelAttribute("phone")String  phone) {
        ......
        return "";
    }

第一次写博客来记录,还请看官多多包涵咯。就这样结束吧

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67789.html

相关文章

  • SpringMVC之源码分析--ViewResolver(五)

    摘要:此解析器与差不多,更改下配置文件中的类全路径即可。总结本章介绍了以及三个视图解析器。这部分内容有点儿多,我会尽快结束。 概述 通过上几篇的学习,我们分析了并试验了ViewResolverComposite、BeanNameViewResolver和ContentNegotiatingViewResolver,这三个类都直接实现ViewResolver接口。Spring MVC提供了很多...

    klinson 评论0 收藏0
  • SpringMVC【开发Controller】详解

    摘要:是使用拦截器来自动帮我们完成中文乱码的问题的。这是我的首页当然了,基于注解和基于来开发,都是通过映射器适配器和视图解析器的。能够控制请求路径和请求方式一个控制器写多个业务方法到目前为止,我们都是一个控制器写一个业务方法,这肯定是不合理的。 前言 本文主要是讲解在Controller中的开发,主要的知识点有如下: 编码过滤器 使用注解开发 注解@RequestMapping详解 业务方...

    Pines_Cheng 评论0 收藏0
  • SpringMVC学习笔记

    摘要:是目前最流行的一种互联网软件架构。协议,是一个无状态协议,即所有的状态都保存在服务器端。而这种转化是建立在表现层之上的,所以就是表现层状态转化。具体说,就是协议里面,四个表示操作方式的动词。 一、SpringMVC概述 Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成为最优秀的MVC框架 S...

    roundstones 评论0 收藏0
  • SpringMVC【参数绑定、数据回显、文件上传】

    摘要:那我们就不用在每一个方法通过将数据传到页面。还能够配置该参数是否是必须的。方法的返回值有种重定向转发内部就是将数据绑定到域对象中的。注解能够将数据绑定到中也就是中,如果经常需要绑定到中的数据,抽取成方法来使用这个注解还是不错的。 前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Cont...

    Flink_China 评论0 收藏0
  • SpringMVC【校验器、统一处理异常、RESTful、拦截器】

    摘要:只要有一个拦截器不放行,不能执行完成号不放行和号不放行测试结果总结只有前边的拦截器方法放行,下边的拦截器的才执行。至于他们的拦截器链的调用顺序,和的是没有差别的。 前言 本博文主要讲解的知识点如下: 校验器 统一处理异常 RESTful 拦截器 Validation 在我们的Struts2中,我们是继承ActionSupport来实现校验的...它有两种方式来实现校验的功能 手写...

    marser 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<