sczhg
sczhg

Reputation: 43

Spring MVC redirect failed

I wanted to do a login page with Spring MVC + Mybatis, the controllers are as below:

@Controller
public class LoginController {
private final UserService userService;

@Autowired
public LoginController(@Qualifier("userService") UserService userService) {
    this.userService = userService;
}

@RequestMapping(value = "/login")
public ModelAndView Login(String username, String password, 
                          ModelAndView mv, HttpSession session) {
    User user = userService.login(username, password);

    // **This is where problems occured**
    if (user != null) {
        session.setAttribute("user", user);
        mv.setView(new RedirectView("/main"));
    } else {
        mv.addObject("message","Login failed.");
        mv.setViewName("loginForm");
    }
    return mv; // with correct value, but responses 404 error
}

@RequestMapping(value = "/loginForm")
public String LoginForm() {
    return "loginForm";
}

@RequestMapping(value = "/main")
public String Main(Model model) {
    return "main";
}
}

I have two jsp files:

/WEB-INF/jsp/loginForm.jsp
/WEB-INF/jsp/main.jsp

Whether I submit the login form correctly or not, there is a 404 error:

HTTP Status 404 - /WEB-INF/jsp/login.jsp

Running in debug mode, the mv was returned with "/main" correctly, so it confused me.

Code below works, but i cant add error message to view anymore.

@RequestMapping(value = "/login")
public String Login(String username, String password, HttpSession session) {
    User user = userService.login(username, password);
    if (user != null) {
        session.setAttribute("user", user);
        return "redirect:/main";
    } else {
        session.setAttribute("message","Login failed");
        return "redirect:/loginForm";
    }
}

Upvotes: 1

Views: 503

Answers (1)

Jainik JB
Jainik JB

Reputation: 24

i have face same issue but it's help for me

ModelAndView model = new ModelAndView();
 if (user != null) {
        session.setAttribute("user", user);
        model = new ModelAndView("/main");
    } else {
        mv.addObject("message","Login failed.");
        model = new ModelAndView("/loginForm");
    }
return model;

Upvotes: 1

Related Questions