0

私は非常に興味深い問題を抱えています。Web アプリのログイン ページを作成しており、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

@ResponseBodyAJAXを使用している場合は、アノテーション内で応答する必要があります。

    @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 を返し、場所を適切に設定します - これはext-js を使用しwindow.location = 'home.action'た例です

  2. ログインページで、AJAX 投稿ではなく、本格的な投稿を実行できるようにします。

于 2011-06-14T12:24:02.443 に答える