Spring MVC 3, пересылка не работает при использовании Ajax - PullRequest
0 голосов
/ 14 июня 2011

У меня очень интересная проблема.Я делаю страницу входа для моего веб-приложения и отправляю запрос на вход через 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 "/";
    }

}

}

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Вам необходимо ответить в течение @ResponseBody Аннотация, если вы используете AJAX.

    @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;
        }

    }
0 голосов
/ 14 июня 2011

Здесь можно сделать несколько вещей:

  1. Не возвращайте представление из вашего контроллера, вместо этого возвращайте json, основываясь на ответе в json, установите соответствующее местоположение - window.location = 'home.action' - вот пример с использованием ext-js

  2. Позвольте странице входа выполнить полноценное сообщение, а не сообщение AJAX.

...