Spring RedirectAttributes参数跳转代码实例

Spring中RedirectAttributes参数跳转是一个基于重定向的方案。它把需要传递的参数放在URL中或放在Session中,然后传递到下一个控制器中,达到了控制器之间的传值与跳转。跳转时可以使用内置默认的redirect:或forward:前缀,或者使用URL绝对路径或相对路径来进行跳转。

下面是具体实现步骤。

1. 添加依赖

在项目中的pom.xml文件中添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>x.x.x.RELEASE</version>
</dependency>

2. 实现跳转源控制器

在需要跳转的源控制器中添加一个控制器方法,方法中使用RedirectAttributes参数,将需要传递的参数放在RedirectAttributes对象中,然后使用redirect:前缀进行跳转:

@Controller
public class SourceController {

    @GetMapping("/source")
    public String source(RedirectAttributes redirectAttributes) {
        redirectAttributes.addFlashAttribute("message", "This message is from source controller.");
        return "redirect:/destination";
    }
}

上面的示例中,我们使用了@GetMapping注解来标识需要跳转的源控制器方法,同时使用了RedirectAttributes参数。RedirectAttributes实现了org.springframework.ui.Model接口,因此我们可以使用addFlashAttribute()方法向其中添加需要传递的参数。最后,我们使用了redirect:前缀来进行跳转。

3. 实现跳转目标控制器

在跳转目标控制器中实现一个控制器方法,用于接收上一个控制器传递的参数。在方法中使用@RequestParam注解或者从Session中获取参数:

@Controller
public class DestinationController {

    @GetMapping("/destination")
    public String destination(@RequestParam("message") String message, HttpSession session) {
        session.setAttribute("message", message);
        return "destination";
    }
}

上面的示例中,我们使用了@GetMapping注解来标识需要跳转的目标控制器方法,在@RequestParam注解中指定了需要获取的参数名message,并使用了HttpSession对象将其放入Session中。

4. 实现视图层

在Spring Boot项目中resources/static目录下新建一个HTML文件,用于展示从目标控制器中获取到的参数:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Destination Page</title>
</head>
<body>
    <h1>Destination Page</h1>
    <p>${message}</p>
</body>
</html>

5. 测试效果

在浏览器中访问http://localhost:8080/source,可以看到跳转效果,并且在目标控制器所对应的视图层中,展示了从源控制器中传递过来的参数。

下面再给出一些常见的应用场景示例:

示例一:添加成功后跳转到列表页并展示成功信息

在添加成功并保存到数据库后,跳转到列表页,并显示保存成功信息。

源控制器:

@PostMapping("/add")
public String add(@Validated User user, BindingResult result, RedirectAttributes redirectAttributes) {
    if (result.hasErrors()) {
        return "add";
    }
    userRepository.save(user);
    redirectAttributes.addFlashAttribute("message", "User added successfully.");
    return "redirect:/list";
}

目标控制器:

@GetMapping("/list")
public String list(Model model, HttpSession session) {
    String message = (String) session.getAttribute("message");
    if (message != null) {
        model.addAttribute("message", message);
        session.removeAttribute("message");
    }
    model.addAttribute("users", userRepository.findAll());
    return "list";
}

示例二:登录失败后跳转回登录页面并展示错误信息

在登录失败后,跳转回登录页面,并展示错误信息。

源控制器:

@PostMapping("/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password,
        RedirectAttributes redirectAttributes) {
    // 验证用户名和密码
    if (username.equals("admin") && password.equals("password")) {
        return "redirect:/dashboard";
    } else {
        redirectAttributes.addFlashAttribute("error", "Invalid username or password.");
        return "redirect:/login";
    }
}

目标控制器:

@GetMapping("/login")
public String login(Model model, HttpSession session) {
    String error = (String) session.getAttribute("error");
    if (error != null) {
        model.addAttribute("error", error);
        session.removeAttribute("error");
    }
    return "login";
}

希望这些示例能够帮助您理解Spring RedirectAttributes参数跳转的应用场景和实现方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring RedirectAttributes参数跳转代码实例 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 详解Spring MVC如何测试Controller(使用springmvc mock测试)

    以下是关于“详解Spring MVC如何测试Controller(使用springmvc mock测试)”的完整攻略,其中包含两个示例。 详解Spring MVC如何测试Controller(使用springmvc mock测试) Spring MVC是一个基于Java的Web框架,它可以帮助我们快速开发Web应用程序。在开发过程中,我们需要对Control…

    Java 2023年5月17日
    00
  • 浅析java中 Spring MVC 拦截器作用及其实现

    下面是详细讲解“浅析Java中Spring MVC拦截器作用及其实现”的攻略。 1. 什么是拦截器 在Spring MVC中,拦截器指的是在请求到达控制器前或者控制器返回响应前,对请求或响应进行拦截并进行处理的一种机制。拦截器的实现需要实现Spring MVC提供的拦截器接口HandlerInterceptor。 2. 拦截器的作用 拦截器的主要作用有: 验…

    Java 2023年5月16日
    00
  • Ubuntu16.04安装部署solr7的图文详细教程

    下面是“Ubuntu16.04安装部署solr7的图文详细教程”的完整攻略: 环境准备 安装Java Solr 7 需要运行在 Java 8 上,所以我们需要先安装 Java 8。 在终端中输入以下命令进行安装: sudo add-apt-repository ppa:webupd8team/java sudo apt update sudo apt ins…

    Java 2023年5月19日
    00
  • Java中JS引擎实现的一句话木马

    Java中JS引擎实现的一句话木马是指,通过在Java中使用JS引擎实现的脚本,来实现对目标系统的攻击和控制。具体的攻击过程如下: 利用Java中JS引擎实现的脚本,来生成一段恶意代码。这段代码可以是一句话木马的代码,也可以是其他类型的恶意代码。 例如,下面是一段简单的JS代码,可以生成一个简单的弹窗: <script>alert("H…

    Java 2023年6月15日
    00
  • BigDecimal的加减乘除计算方法详解

    BigDecimal的加减乘除计算方法详解 什么是BigDecimal 在Java中,float和double类型用于表示浮点数(有小数的数),但是浮点数计算存在精度问题。比如0.1+0.2实际上应该是等于0.3的,但是经过浮点数计算,结果会变成0.30000000000000004。为了解决这个问题,Java提供了BigDecimal类。 BigDecim…

    Java 2023年5月26日
    00
  • Java中char数组(字符数组)与字符串String类型的转换方法

    Java中char数组(字符数组)与字符串String类型的转换方法是常见的操作之一,常见的场景如将字符串转为字符数组或将字符数组转为字符串。下面是具体的转换方法及示例说明。 将字符串转换为char数组 可以调用String类的toCharArray()方法将字符串转为char数组。 示例代码: String str = "hello world&…

    Java 2023年5月26日
    00
  • Java 面向对象的特征解析与应用

    Java 面向对象的特征解析与应用 面向对象的特征 Java 是一种面向对象编程语言,具有以下四个特征: 封装性(Encapsulation):将数据和方法封装在一个单元中,数据可以被保护,只能通过特定方法进行访问,避免了数据的误操作和改变,提高了代码的安全性和可靠性。 继承性(Inheritance):继承允许一个类(称为“子类”)继承另一个类(称为“父类…

    Java 2023年5月26日
    00
  • Java 使用json-lib处理JSON详解及实例代码

    下面是详细讲解“Java 使用json-lib处理JSON详解及实例代码”的完整攻略: 什么是 JSON JSON 是一种轻量级的数据交换格式,它可以被人类很容易地读取和编写,同时也可以被计算机程序很容易地解析和生成。JSON 的全称是 JavaScript Object Notation,它的语法格式来源于 JavaScript 语言的对象字面量表示法。J…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部