在SpringMVC中,重定向到页面时,我们想要将一些值传递给下一个页面,这些值需要被设置在model中。下面是完整攻略:
1. 在Controller中设置重定向的model值
在Controller中设置model值并将请求重定向到另一个页面时,我们需要使用RedirectAttributes
接口。可以使用addAttribute()
方法将值添加到model中。例如:
@Controller
public class ExampleController {
@RequestMapping("/example")
public String example(RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("message", "This is a message");
return "redirect:/anotherPage";
}
}
上面的代码中,我们向addAttribute()
方法中添加了一个名为message
的属性,属性值为"This is a message"。redirect:/anotherPage
是我们要重定向到的页面。
2. 在重定向后的Controller中获取model值
在下一个Controller中获取之前设置的model值时,我们需要使用@RequestParam
注解。例如:
@Controller
public class AnotherController {
@RequestMapping("/anotherPage")
public String anotherPage(@RequestParam("message") String message, Model model) {
model.addAttribute("message", message);
return "anotherPage";
}
}
上述代码中,我们使用@RequestParam
注解从重定向的URL中获取名为message
的参数,并将其值设置为String message
参数的值。随后,我们将值添加到model中,并返回anotherPage
。
3. 示例1
接下来我们通过一个完整的示例来演示上述步骤。首先,我们创建一个名为"redirectExample"的Maven项目,将pom.xml文件中添加以下依赖:
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
接下来,我们创建一个简单的Controller,该Controller将值设置在model中,并将请求重定向到另一个页面:
package com.example.redirectExample.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller
public class ExampleController {
@RequestMapping("/example")
public String example(RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("message", "This is a message");
return "redirect:/anotherPage";
}
}
在上面的代码中,我们使用addAttribute()
方法向Model中添加了一个名为message
的属性,其值为"This is a message"。接下来,我们通过redirect:/anotherPage
将请求重定向到另一个Controller。
接下来,我们创建另一个Controller,该Controller接收之前设置的model值,并将该值传递给视图:
package com.example.redirectExample.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class AnotherController {
@RequestMapping("/anotherPage")
public String anotherPage(@RequestParam("message") String message, Model model) {
model.addAttribute("message", message);
return "anotherPage";
}
}
在上面的代码中,我们使用@RequestParam
获取前一个Controller设置的值,并将值添加到Model中,最后将其传递给视图。
最后,我们创建一个名为"anotherPage.jsp"的视图文件,用于显示model中设置的值:
<html>
<head>
<title>Another Page</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
上面的视图使用EL表达式从Model中获取名为message
的属性,并将其渲染为HTML。现在,我们运行该应用程序并访问http://localhost:8080/example
,您将重定向到另一个页面,该页面显示之前设置的值"This is a message"。
4. 示例2
下面是另一个示例,该示例使用重定向以及前后端的分离架构。我们将使用React作为前端库,并将创建一个简单的React组件,该组件将从后端获取一个值并显示在UI上。
下面是一个名为"redirectExample"的Maven项目,其中有一个简单的SpringMVC Controller,该Controller将值设置在model中,并将请求重定向到另一个Controller:
package com.example.redirectExample.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller
public class ExampleController {
@RequestMapping("/")
public String index() {
return "index";
}
@RequestMapping("/example")
public String example(RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("message", "This is a message");
return "redirect:/getMessage";
}
}
在上面的代码中,我们首先指定了应用程序的主页为index
,然后在example
方法中,我们使用addAttribute()
方法设置名为message
的属性,其值为"This is a message"。最后,我们使用redirect:/getMessage
将请求重定向到另一个Controller。
接下来,我们创建另一个Controller,该Controller将返回设置在model中的值:
package com.example.redirectExample.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MessageController {
@RequestMapping("/getMessage")
@ResponseBody
public String getMessage(Model model) {
String message = (String) model.asMap().get("message");
return message;
}
}
在上面的代码中,我们使用@ResponseBody
注解返回Model中设置的名为message
的属性。
最后,我们创建一个名为"index.jsp"的视图文件,该文件引用了一个用于显示消息的React组件:
<html>
<head>
<title>SpringMVC React Example</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/react/15.0.2/react.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/react/15.0.2/react-dom.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
<script src="/js/components/message.js" type="text/babel"></script>
</head>
<body>
<div id="root"></div>
<button id="getMessage" onClick="getMessage()">Get Message</button>
<script type="text/babel">
function getMessage() {
fetch('/example')
.then(response => response.text())
.then(data => {
ReactDOM.render(
<Message message={data} />,
document.getElementById('root')
);
});
}
</script>
</body>
</html>
上面的代码使用了一些JavaScript库,包括React、Babel和一个自定义的React组件。该组件将消息作为属性,并将其渲染为HTML。getMessage
按钮调用JavaScript方法获取消息,然后将其传递给React组件。
现在,我们运行该应用程序并访问http://localhost:8080
,您将看到一个包含"Get Message"按钮的页面。单击该按钮将从后端获取消息并将其显示在UI上。
以上就是SpringMVC中重定向model值的获取方式的完整攻略,希望对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC中重定向model值的获取方式 - Python技术站