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

时间:2016-09-28 02:25:48

标签: java spring spring-mvc spring-boot

我有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>

在我的下一个控制器中,我在方法参数中使用application访问mode@RequestParam的值,该方法完全正常,如下所示

@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";
    }
}

但我的问题是,有没有其他方法可以将application类中的modesInfoHandler的值提升到我的第二个{InfoProcessorController controller 1}}

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

2 个答案:

答案 0 :(得分:0)

我不知道你真正期待什么,你知道你把它们作为问题显示的参数,你可以把它们放在会话中,这通常是针对购物车等所做的。如果您正在使用一长串页面进行实质性操作,那么使用需要经过并填写您可能需要查看Spring Webflow。这可能是你的追求。很难说出你的要求是什么,因为它不清楚你想如何传递它们,或者你会对它感到满意,我建议你的问题更清楚。

答案 1 :(得分:0)

多种方式

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