在Spring MVC中使用POST方法重定向

时间:2018-08-28 04:19:04

标签: java spring spring-mvc model-view-controller

我的问题是我想重定向到索引页面,而不必查看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}不显示属性?

感谢您的帮助。谢谢你。

3 个答案:

答案 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}现在显示我的属性。

图片:

enter image description here