尝试使用"重定向重定向页面时的状态404:"返回ModelAndView时的前缀

时间:2014-09-15 01:42:36

标签: spring-mvc redirect post-redirect-get modelandview

我尝试在成功登录后重定向我的请求,涉及2个页面,通常登录登录成功

这是Login mapping的Controller类

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

并成功加载页面,我试图实现"发布/重定向/获取设计模式" ,避免重复提交表单,我是看到很多使用重定向:的示例 在一个 ModelAndView对象中,但是没有我看到404异常问题。请帮忙。并提前致谢。

已编辑:当我按照 mv.setViewName(" user / loginSuccess")制作返回语句时 当我刷新 loginSucsess页面

时,我收到此警告

duplicate form submission

2 个答案:

答案 0 :(得分: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 类的示例,说明需要另一个处理程序方法来映射重定向请求

答案 1 :(得分:0)

我的404是由于当你返回" /myPage.jsp"的视图时,你做了

return "/myPage";

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

return "redirect:/myPage JSP ";。