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);
}
}
}