SpringMVC处理在请求后,跳转过程中还要传递数据的情况(ModelAndView:返回模型和视图)

本文介绍了如何使用SpringMVC的ModelAndView处理请求后跳转并传递数据的场景。当用户输入账号和密码,正确时转向对应页面,错误则返回登录页并显示错误信息。ModelAndView用于存储结果数据和视图信息,视图解析器负责解析并显示在指定页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ModelAndView的用法:
业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。
例子:用户输入账号和密码,输入正确后跳转到对应页面,输入错误返回到登录页面,并提示错误信息。

1.login.html登录页面

<!DOCTYPE html>
<html>
	<head>
		 <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <script src="../js/jquery-3.3.1.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
    <script src="../js/loadtime.js"></script>
    <link href="../css/bootstrap.min.css" rel="stylesheet" />
    <link href="../css/style.css" rel="stylesheet" />
    <style>
    	.container{
    		text-align: center;
    		float: none;
    		padding-top:30%;
    	}

    </style>
	<title>登录页面</title>
	</head>
	<body class="whc wh100 posA bgefeff4">
        <div class="w90pre">
            <div class="whc">
                <img src="../img/logo.png" class="w5rem" alt="">
                <span class="logoF fw600">大宝国际贸易</span>
            </div>
            <p class="logoF mt2rem text-center">订餐系统</p>
            <div class="container">
                <div class="row loginD">
                    <form action="" method="get" onsubmit="return saveInfo();">
                        <p><input id="uname" type="text" name="userName" placeholder="请输入手机号"
                                   class="userTelD" /></p>
                        <p><input id="pwd" type="password" name="passwd" placeholder="请输入密码"
                                  class="userPadD" /></p>
                       <input id="submit"  type="submit" value="登录" class="loginBtn" />

                    </form>
                    <p id="loginInfo"></p>
                </div>
            </div>
        </div>
	</body>
	<script src="../js/jquery-3.3.1.min.js" type="text/javascript"></script>
	<script th:inline="javascript">
		$(function(){
			//初始化表单请求的url
			var url="http://"+ip+":9080/user/login";
			$("form").attr("action",url);
			//后台登录验证失败后返回到登录页面,同时返回数据,warn是返回的key值
			var info=[[${warn}]];//返回登录失败信息
			var userName=localStorage.getItem("userName");
			var passwd=localStorage.getItem("passwd");
			if(userName){
				$("#uname").val(useName);
			}
			if(passwd){
				$("#pwd").val(passwd);
			}
			if(info=="fail"){
				$("#loginInfo").text("密码错误,登录失败");
				localStorage.clear();//清空存储在本地的数据;
				
			}
			//点击提交按钮,同时把用户信息存储在本地
		    $("#submit").click(function(){
				 localStorage.setItem("userName",$("#uname").val());
				 localStorage.setItem("passwd",$("pwd").val());
				 console.log(localStorage.getItem("userName"));
			});  
			function saveInfo(){
				localStorage.setItem("userName",$("#uname").val());
				localStorage.setItem("passwd",$("pwd").val());
			};
		})
		
	</script>
</html>

2. UserController控制器类

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import com.wbst.food.entity.User;
import com.wbst.food.service.INoticeConfigService;
import com.wbst.food.service.IOrderFoodService;
import com.wbst.food.service.IUserService;
import lombok.AllArgsConstructor;

@Controller
@SessionAttributes(value = { "userName" })
@RequestMapping("/user")
@AllArgsConstructor
public class UserController {
	private INoticeConfigService noticeConfigService;
	private IUserService userService;
	private IOrderFoodService orderFoodService;

	@GetMapping("/login")
	public ModelAndView login(@RequestParam(value = "userName", required = false) String userName,
			@RequestParam(value = "passwd", required = false) String passwd) {
		Boolean bool = userService.verificateUser(userName, passwd);
		ModelAndView modelAndView = new ModelAndView();
		// 如果用户登录不成功
		if (bool == false) {
			modelAndView.setViewName("login");
			modelAndView.addObject("warn", "fail");
			return modelAndView;// 返回登录页面
		}
		// 用登录成功
		User user = userService.queryUser(userName);
		Integer userRole = user.getUserRole();
		// 根据角色调用不同方法,返回对应页面和数据,权限控制
		switch (userRole) {
		case 0:// 食客点餐页面
			return userService.getUserModel(userName);
		case 1:// 食堂管理员端页面
			return orderFoodService.getFooderCount(userName);
		default:// 系统管理员端页面
			return noticeConfigService.getConfig(userName);
		}

	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值