我的问题是我想重定向到索引页面,而不必查看URL中附加的属性。
我发现解决方案为addFlashAttributes
,它没有在URL中附加属性,但是我看不到此方法保存的任何消息。
代码:
控制器
@RequestMapping(value="/login",method = RequestMethod.POST)
public ModelAndView loginResult(HttpServletRequest req,
HttpServletResponse res,
RedirectAttributes redir) {
if (uname.equals(inf.getUsername()) & &pwd.equals(inf.getPassword()) && dept.equals(inf.getDept()))
{
req.getSession().setAttribute("uname",inf.getName());
return new ModelAndView("employeeLoginResult", "message", message1);
}
else if (uname.equals(inf2.getUsername()) && pwd.equals(inf2.getPassword()) && dept.equals(inf2.getDept()))
{
req.getSession().setAttribute("uname", inf2.getName());
return new ModelAndView("adminLoginResult", "message", message2);
}
else
{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("redirect:/index.jsp");
redir.addFlashAttribute("message","Sorry Username Password Error");
return modelAndView;
}
}
现在,我具有用于验证的硬编码值,并且将来会将该验证与数据库的DAO层集成。 addFlashAttribute
为我完成了不将邮件附加到URL的工作,但我也想在索引页上显示邮件。
索引页
<head><tile>index</title>
</head>
<body>
<b><span class="heading">LOGIN USER</span></b>
<div class="container">
<form action="login.html" method="Post">
<div class="form_style">
<input type="text" name="username" placeholder="Enter Username"/>
<input type="password" name="pwd" placeholder="Enter password"/>
<select name="dept">
<option>IT</option>
<option>Admin</option>
<option>HR</option>
<option>Marketing</option>
</select>
<input type="Submit" value="submit">
<p>${message}</p>
</div>
</form>
</div>
</body>
我在做什么错?谁能解释?
为什么${message}
不显示属性?
感谢您的帮助。谢谢你。
答案 0 :(得分:1)
您可以按以下方式更改Controller并使用相同的index.jsp文件。
@RequestMapping(value="/login",method = RequestMethod.POST)
public ModelAndView loginResult(HttpServletRequest req,HttpServletResponse res, Model model){
String message = "";
String response = "";
if(uname.equals(inf.getUsername())&&pwd.equals(inf.getPassword())&&dept.equals(inf.getDept())) {
req.getSession().setAttribute("uname",inf.getName());
message = message1;
response = "employeeLoginResult";
}
else if(uname.equals(inf2.getUsername())&&pwd.equals(inf2.getPassword())&&dept.equals(inf2.getDept())) {
req.getSession().setAttribute("uname",inf2.getName());
message = message2;
response = "adminLoginResult";
}
else{
message = "Sorry Username Password Error";
response = "index";
}
model.addAttribute("message", message);
return response;
}
答案 1 :(得分:0)
将控制器用于索引页面。
使用addFlashAttribute的属性将使用另一个控制器进行检索。
重定向后,Flash属性会自动添加到提供目标URL的控制器模型中。 RedirectAttributes
@RequestMapping("/index")
public String index(HttpServletRequest req, HttpServletResponse res, Model model) {
// model has the attribute 'message'
return "/indexView";
}
答案 2 :(得分:0)
我认为我通过使用转发而不是重定向找到了解决此问题的方法。
转发的工作方式是它将从我的控制器转发我的属性,并且不会将它们附加到URL。
对于我来说,这是最好的解决方案,无需更改很多代码。
代码:
我刚刚在控制器中更改了一条要重定向到索引页面的语句
控制器:
@RequestMapping(value="/login",method = RequestMethod.POST)
public ModelAndView loginResult(HttpServletRequest req,HttpServletResponse res,RedirectAttributes redir,Model model)
{
InfoEmployee inf = new InfoEmployee();
InfoManager inf2 = new InfoManager();
String pwd=req.getParameter("pwd");
String dept = req.getParameter("dept");
String name1 = inf.getName();
String message1 = "Welcome "+name1;
String name2 = inf2.getName();
String message2 = "Welcome "+name2;
if(uname.equals(inf.getUsername())&&pwd.equals(inf.getPassword())&&dept.equals(inf.getDept()))
{
req.getSession().setAttribute("uname",inf.getName());
return new ModelAndView("employeeLoginResult", "message", message1);
}
else if(uname.equals(inf2.getUsername())&&pwd.equals(inf2.getPassword())&&dept.equals(inf2.getDept()))
{
req.getSession().setAttribute("uname",inf2.getName());
return new ModelAndView("adminLoginResult", "message", message2);
}
else
{
return new ModelAndView("forward:index.jsp","message","Sorry Username Password Error");
}
}
$ {message}现在显示我的属性。
图片: