1

ログインに成功した後、リクエストをリダイレクトしようとしています.2つのページが関係しています.loginloginsuccessが一般的です.

ログイン マッピングのコントローラ クラスは次のとおりです。

@Controller
@SessionAttributes("userObj")
@RequestMapping("/user")
public class UserController {

  @RequestMapping(value = "/login", method = RequestMethod.GET)
  public ModelAndView initLoginView(ModelAndView mv) {

    mv.addObject("userObj", new User());
    mv.setViewName("user/login");

    return mv;
  }

  @RequestMapping(value = "/login", method = RequestMethod.POST)
  public ModelAndView loginUser(ModelAndView mv, @ModelAttribute("userObj") User user, BindingResult result, SessionStatus status) {

    System.out.println(user.getUserName());
    System.out.println(user.getPassword());

    mv.addObject("userObj", user);
    mv.setViewName("redirect:/user/loginSuccess");

    return mv;
  }
} 

404、リソースが見つかりませんというエラーが表示されるので、POST メソッドから返された ModelAndView オブジェクトが原因であると思われるため、返される値を次のように変更しました。

mv.setViewName("user/loginSuccess");
return mv;

から

mv.setViewName("redirect:/user/loginSuccess");
return mv;

ページが正常に読み込まれます。フォームの重複送信を回避する「ポスト/リダイレクト/取得デザインパターン」を実現しようとしています。リダイレクトを使用する多くの例を見てい ます: 404 例外の問題が発生しました。助けてください。事前に感謝します。

EDITED : このmv.setViewName("user/loginSuccess");のような return ステートメントを作成すると、loginSucsess ページを更新すると、 この警告が表示されます

フォームの重複送信

4

2 に答える 2

0

私はなんとかウェブ上のリソースを掘り下げることができましたが、幸いなことにサーバーは「警告:この種のアプローチを行うことに気付いたURI を使用した HTTP 要求のマッピングが見つかりませんでした」というメッセージをスローします。

注:「ログイン」機能の代わりに、「登録」機能で問題を解決することにしました。これは、 POSTメソッドを扱うのと同じ機能であり、ログイン機能の作成に関しては、Spring Securityに関する優れたリソースを見つけました。

@Controller
@SessionAttributes("userObj")
@RequestMapping("/user")
public class UserController {

@Resource(name = "userManager")
private UserManager userManager;

@RequestMapping(value = "/register", method = RequestMethod.GET)
public ModelAndView setUpRegisterView(ModelAndView mv) {

    mv.addObject("userObj", new User());
    mv.setViewName("user/register");

    return mv;
}

@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView registerUser(ModelAndView mv, @ModelAttribute("userObj") User user, BindingResult result, RedirectAttributes ra) {

    userManager.saveUser(user);

    mv = new ModelAndView(new RedirectView("/user/registerSuccess", true));
    ra.addFlashAttribute(user);

    return mv;
}

@RequestMapping(value = "/registerSuccess", method = RequestMethod.GET)
public ModelAndView registerSuccess(ModelAndView mv) {

    mv.setViewName("user/registerSuccess");
    return mv;
 }
}

RedirectViewクラスを使用し、別のハンドラー メソッドを追加してリダイレクト ビューをマップすることで、重複フォーム送信の問題を克服し、「registerSuccess」ページを更新してデータベースを監視しましたが、データの重複は発生していません。

RedirectViewクラスを使用して、リダイレクト要求をマップするには別のハンドラー メソッドが必要であると言っている例が見つからないのは奇妙なことです。

于 2014-09-15T07:34:16.410 に答える