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日

相关文章

  • Java系统运行缓慢等问题的排查思路

    我来详细讲解一下“Java系统运行缓慢等问题的排查思路”的完整攻略。 1. 问题定位 首先,我们需要明确具体的问题现象。如果Java系统运行缓慢,可能会有以下一些表现形式: 请求响应时间过长 CPU占用率较高 内存使用率较高 日志输出异常 根据问题现象,我们可以使用以下一些工具来定位问题: 配置管理工具:例如Ansible、Puppet,可以帮助我们收集系统…

    Java 2023年5月24日
    00
  • 搭建MyBatis-Plus框架并进行数据库增删改查功能

    搭建MyBatis-Plus框架并进行数据库增删改查功能的完整攻略如下: 准备工作 下载和安装JDK和MySQL; 创建一个Spring Boot项目; 在项目中添加mybatis-plus-boot-starter依赖; 在项目的配置文件中配置数据库连接信息。 配置MyBatis-Plus框架 创建数据库表; 创建实体类,并在类上添加@TableField…

    Java 2023年6月1日
    00
  • Gradle的使用教程详解

    Gradle的使用教程详解 Gradle 是一款基于 Java 平台构建工具,既可用于构建 Java 应用程序,也可用于构建 Android 应用程序。Gradle 使用一种声明式语言来描述构建自动化任务和构建新的依赖关系,以简化开发人员的构建流程。 Gradle安装 在Gradle官网下载最新的Gradle压缩文件。 解压Gradle文件到你选择的安装位置…

    Java 2023年5月27日
    00
  • Springboot中如何自动转JSON输出

    在Spring Boot中,可以通过添加相关依赖和注解的方式实现自动转JSON输出。下面是详细的攻略: 添加依赖 首先需要在pom.xml文件中添加相关依赖,这些依赖包括spring-boot-starter-web、spring-boot-starter-json等。 例如,在maven项目中可以添加以下依赖: <dependencies> &…

    Java 2023年5月26日
    00
  • Java微信公众号开发之通过微信公众号获取用户信息

    Java微信公众号开发之通过微信公众号获取用户信息 简介 本文将详细讲解如何通过Java实现微信公众号获取用户信息细节,包括获取用户基本信息和获取关注者列表,最后提供两条常用的示例说明。 准备工作 在开始获取用户信息之前,你需要进行以下步骤的准备工作: 注册微信公众号,并获取关注者OpenID和Access Token. 创建Java Web服务器,并引入相…

    Java 2023年5月26日
    00
  • javaweb开发提高效率利器JRebel详解

    JRebel是什么 JRebel是一个Java开发生产力工具,它可以消除Java程序中常见的重启服务、重建工程和重新部署过程。JRebel可以显著提高Java开发者的生产力,让他们将更多的时间花在创造新价值上。 JRebel能做什么 JRebel可以实现Java应用程序的热部署,即在不用重启和重新部署的情况下,将Java代码的变更更新到应用程序中。JRebe…

    Java 2023年5月26日
    00
  • JavaWeb 中Cookie实现记住密码的功能示例

    JavaWeb 中 Cookie 实现记住密码的功能示例攻略 概述 在 JavaWeb 开发中,Cookie 是一种非常重要的数据传输机制。它将数据存储在客户端本地,通过浏览器发送到服务器,用于实现用户登录状态保持、购物车信息保存、网站个性化推荐等功能。其中,Cookie 实现记住密码的功能是非常常见的场景。 本攻略将详细讲解如何使用 Cookie 实现 J…

    Java 2023年6月15日
    00
  • 详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作

    下面就针对所提到的 MyBatis 的几个关键点展开讲解。 getMapper() 接口 getMapper() 接口是 MyBatis 通过动态代理将 Mapper 接口和 XML 配置文件绑定在一起。这样每次调用的时候就可以直接使用对象调用 Mapper 中的方法,并且 MyBatis 会自动帮我们调用 SQL 语句。下面是一个示例: public in…

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