繁体   English   中英

在不使用查询字符串的情况下将数据从一个控制器传递到另一个-Spring MVC

[英]Passing data from one controller to another without using query string - Spring MVC

我有以下model

@Service
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class InfoHandler {

    String url;

    public String getBeanData() {
        String application = "testApplication";
        String mode = "appMode";
        url = UriComponentsBuilder.fromPath("/nextPage")
                .queryParam("mode", mode)
                .queryParam("application", application)
                .build()
                .toUriString();
        return url;
    }
}

我的控制器:

@Controller
@RequestMapping("/")
@ComponentScan("com.springplay")
@EnableAutoConfiguration
public class InfoController {

    @RequestMapping("/getInfo")
    public ModelAndView getInfo(ModelMap model) {
        InfoHandler infoHandler = new InfoHandler();
        //List<InfoBean> beanList = infoHandler.getBeanData();
        String url = infoHandler.getBeanData();
        return new ModelAndView("Information", "urlData", url);
    }
}

我的观点:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Information Page</title>
</head>
<body>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%-- <c:set var="informationVar" value="${infoData}" /> --%>

<a href="${urlData}"> link to next page</a>
</body>
</html>

在我的下一个控制器中,我使用方法参数中的@RequestParam访问applicationmode的值,如下所示

@Controller
@RequestMapping("/")
@ComponentScan("com.springplay")
@EnableAutoConfiguration
public class InfoProcessorController {

    @RequestMapping("/nextPage")
    public String getInfo(ModelMap model, @RequestParam(value = "application") String application,
            @RequestParam(value = "mode") String mode) {
        System.out.println("application: " + application);
        System.out.println("mode: " + mode);
        return "welcome";
    }
}

但是我的问题是,是否还有其他方法可以将InfoHandler类中的applicationmodes的值获取到我的第二个controller InfoProcessorController

这只是一个例子。 我不想通过查询字符串传递数据的原因是因为我有很多这样的变量想要传递给第二个控制器

我不知道您的真正期望是什么,您知道如问题所显示的那样将它们用作参数,可以将它们放在会话中,这通常是对购物车等执行的操作。 如果您要对大量页面进行大量操作,则需要仔细研究并填写使用方法,您不妨查看一下Spring Webflow。 那可能就是你的追求。 很难说出您的要求是什么,因为尚不清楚您想如何通过它们,或者您会感到满意,我建议您将问题弄清楚。

多种方式

  • 在会话中传递变量
  • 使用post方法传递变量,这样它们就不会出现在查询参数中
  • 保存在cookie中并在服务器端进行访问(从不建议这样做)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM