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");

そして、Javascript がsame page存在するかどうかを調べ、redirectUrl存在する場合はページ全体のリダイレクトをトリガーします。

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