2012-02-26 91 views
2

控制器中的弹簧重定向不起作用,如返回“重定向:/ reservation/reservationSuccess”但返回“/ reservation/reservationSuccess”;工作中。为什么它不工作。它出错了。请帮忙。弹簧重定向不起作用

@RequestMapping(method = RequestMethod.POST) 
public String submitForm(@ModelAttribute("reservation") Reservation reservation, 
         BindingResult result, 
         SessionStatus status, 
         Model model) { 
    validator.validate(reservation, result); 
    if(result.hasErrors()) { 
     model.addAttribute("reservation",reservation); 
     return "reservation/reservationForm"; 
    } 
    reservationService.make(reservation); 
    status.setComplete(); 
    return "redirect:reservation/reservationSuccess"; 
} 
+0

定义“不工作”。你期望它做什么,它做什么呢? – 2012-02-26 08:12:29

+0

它给404或找不到错误消息。我希望呈现reservationSuccess视图。但/ reservation/reservationSuccess正在呈现reservationSuccess.jsp页面。 – Curious 2012-02-26 11:27:39

回答

5

当你在做一个重定向到reservation/reservationSuccess,顾名思义,浏览器会发送一个新的请求到您的Web应用程序的URL reservation/reservationSuccess。您将在浏览器的地址栏中看到完整的网址。

如果这个URL没有映射到您的web应用中的任何servlet,那么您显然会遇到404错误。

您需要明白,重定向的目的不是分派给视图(JSP)。重点是让浏览器转到您的Web应用程序中的另一个URL。因此,在前缀redirect:之后放置的路径应该是您的Spring MVC应用程序的动作路径。不是视图的路径。

1

你必须在你的控制器中有另一种方法来拦截reservation/reservationSuccess GET请求。

例如:

@RequestMapping(value="reservation/reservationSuccess", method = RequestMethod.GET) 
public String getSuccess() { 
    return "reservation/reservationForm"; 
} 
0

“重定向:XXX”正在寻找一个RequestMapping匹配重定向串XXX,然而,返回“XXX”是要去寻找视图解析器映射该字符串一个JSP页面。这是主要的区别。