0

我有一个非常有趣的问题。我正在为我的网络应用程序制作登录页面,并通过 AJAX 发送登录请求。如果成功,我想将用户转发到另一个页面。

似乎他的事情就是这样。我发送 Ajax 请求,控制器转发我需要查看(我在调试模式下看到日志)但我留在同一页面上,因为我假设页面正在等待 AJAX 响应,因此转发不会发生。

我认为这也是处理此问题的错误方法,但由于我对此并不了解。如何登录并将用户转发到下一页。

谢谢你。

这是我的代码:

JS代码:

    Page.authenticate = function() {
        $.ajax({
              url: "/login/authenticate/" + $('#username').val() + "/" + $('#password').val(),
              type: "GET",
              success: function(poi){
                 // alert("nesto");
              }
           });

        return true;
    }

控制器类:

@Controller
public class LoginPageController {

private Logger logger = Logger.getLogger(this.getClass());

@Autowired
private UserManagement userManagement; 

@RequestMapping(value="/login/authenticate/{username}/{password}", method=RequestMethod.GET)
public String authenticate(@PathVariable("username") String userName, @PathVariable("password") String password, Model model) {

if (userManagement.authenticateUser(userName, password)) {
        String forward = "forward:/login/success";
        return forward;
    } else {
        model.addAttribute("errorMessage", "Invalid Username/Password, please try again!");
        return "/";
    }

}

}
4

2 回答 2

1

@ResponseBody如果您使用 AJAX,则需要在 Annotation 中响应。

    @RequestMapping(value="/login/authenticate/{username}/{password}", method=RequestMethod.GET)
    public String authenticate(@PathVariable("username") String userName, @PathVariable("password") String password, Model model) {

    if (userManagement.authenticateUser(userName, password)) {
            String forward = "forward:/login/success";
            return forward;
        } else {
            String forward = "forward:/login/error?message=Invalid Username/Password, please try again!";
            return forward;
        }

    }

     @RequestMapping(value="/login/success", method=RequestMethod.GET)
      @Responsebody
      public String handleMySuccessRedirect() {
         return "Logged In successfully"
              } 

 @RequestMapping(value="/login/error", method=RequestMethod.GET)
  @Responsebody
  public String handleMyExceptionOnRedirect(@RequestParamter("message") String message) {
     return message;
          } 

更新:

 @RequestMapping(value="/login/authenticate/{username}/{password}", method=RequestMethod.GET)
@ResponseBody
    public String authenticate(@PathVariable("username") String userName, @PathVariable("password") String password, Model model) {

    if (userManagement.authenticateUser(userName, password)) {
            String response = "Logged Successfully";
            return response;
        } else {
            String response = "Invalid Username/Password, please try again!";
            return response;
        }

    }
于 2011-06-14T12:37:41.230 回答
0

您可以在这里做几件事:

  1. 不要从控制器返回视图,而是返回 json,根据 json 中的响应,适当地设置位置window.location = 'home.action'- 这是一个使用 ext-js 的示例

  2. 让登录页面执行完整的帖子,而不是 AJAX 帖子。

于 2011-06-14T12:24:02.443 回答