3

我在控制器下方恢复模型视图属性表单

@RequestMapping(value = "/signin", method = RequestMethod.POST)
    public @ResponseBody
    ModelAndView loginUser(@RequestParam(value = "userName") String userName,
            @RequestParam(value = "password") String password,
            ModelAndView model) {
     on success login

       return new ModelAndView("redirect:/another controller here");
     on failure login 

           return new ModelAndView("same page");

我有调用此控制器的 jquery ajax 调用,当成功登录时,我希望用户进入另一个页面,但我的响应来到同一页面而不是重定向到另一个页面。

需要帮助

编辑 - 我正在使用基于 URL 的视图解析器和 Apache 磁贴进行视图渲染

4

1 回答 1

6

假设我理解您的问题,重定向将在 AJAX 调用的上下文中发生 - 因此 JQuery AJAX 代码将遵循重定向并接收它从/another controller here. 这不会触发整个页面刷新,但 JQuery AJAX 代码将提供响应以在当前页面中呈现。

要在成功登录时更改整个页面,最好不要在此屏幕上使用 AJAX。

或者,您可以返回一些指示符来告诉 JQuery 重定向。例如:

@RequestMapping(value = "/signin", method = RequestMethod.POST)
    public @ResponseBody
    ModelAndView loginUser(@RequestParam(value = "userName") String userName,
        @RequestParam(value = "password") String password,
        ModelAndView model) {

     on success login
       ModelAndView modelAndView = new ModelAndView("same page");
       modelAndView.addObject("redirectUrl", "/another controller here");
       return modelAndView;

     on failure login 
       return new ModelAndView("same page");

然后有一些 Javascriptsame page来查找是否存在redirectUrl并触发整页重定向(如果存在)。

var redirect = '${redirectUrl}';
if (redirect) {
    window.location.replace(redirect);
}
于 2013-10-15T10:55:07.573 回答