Редирект после метода POST весной MVC - PullRequest
0 голосов
/ 28 августа 2018

Моя проблема в том, что я хочу перенаправить на свою индексную страницу без необходимости видеть атрибуты, добавленные в 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 голосов
/ 28 августа 2018

Вы можете изменить свой контроллер, как показано ниже, и использовать тот же файл 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;
}
0 голосов
/ 28 августа 2018

Я думаю, что нашел способ обойти эту проблему, используя forward вместо redirect.

Способ работы вперед заключается в том, что он будет пересылать мои атрибуты с моего контроллера и не добавлять их в 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

0 голосов
/ 28 августа 2018

Используйте контроллер для страницы индекса.

атрибуты, использующие addFlashAttribute, будут получены с помощью другого контроллера.

После перенаправления атрибуты flash автоматически добавляются в модель контроллера, который обслуживает целевой URL. RedirectAttributes

@RequestMapping("/index")
public String index(HttpServletRequest req, HttpServletResponse res, Model model) {
    // model has the attribute 'message'
    return "/indexView";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...