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, resource not found错误,所以我怀疑我从 POST 方法返回的 ModelAndView 对象是罪魁祸首,所以我将返回值更改

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

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

并成功加载页面,我正在尝试实现避免重复表单提交的“发布/重定向/获取设计模式”,我看到很多使用重定向的示例:ModelAndView 对象中,但不是我看到 404 异常问题。请提供任何帮助。并提前致谢。

编辑:当我做出这样的返回语句时mv.setViewName("user/loginSuccess"); 刷新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 回答
0

我的 404 是由于当您返回“/myPage.jsp”的视图时,您确实

return "/myPage";

但是当你重定向到它时,你会

return "redirect:/myPage. jsp" ;

于 2018-03-04T22:52:56.497 回答