前缀“重定向:”无法解析视图

时间:2013-06-22 18:59:14

标签: java spring spring-mvc

我正在按照书中的应用示例 - Spring Recipes,第8-10节。我陷入了困境。 我会尽量保持简短。

预订 bean包含以下字段:

String courtName, Date date, int hour, Player player, SportType sportType

播放器 bean只包含两个字段 - nameage

SportType 枚举

public enum SportType {
    TENNIS("Tennis"), 
    SOCCER("Soccer");
    // Constructor, Getter
}

现在,我有一个视图 - reservationForm.jsp ,带有相应的控制器 - ReservationFormController

控制器具有以下注释:

@Controller
@RequestMapping("/reservationForm")
@SessionAttributes("reservation")

此外,它有一些方法,其中相关的是:

@RequestMapping(method=RequestMethod.GET)
public String setupForm(
          @RequestParam(required = false, value="username") String username,
          @RequestParam(required = true, value="age") int age,
                                                       Model model) {
    System.out.println("Setting Up Form");
    Reservation reservation = new Reservation();
    reservation.setPlayer(new Player(username, age));
    model.addAttribute("reservation", reservation);
    return "reservationForm";
}

@RequestMapping(method=RequestMethod.POST)
public String submitForm(Model model, 
                       @ModelAttribute("reservation") Reservation reservation,
                       BindingResult result, SessionStatus status) {

    reservationValidator.validate(reservation, result);

    if (result.hasErrors()) {
        model.addAttribute("reservation", reservation);
        return "reservationForm";
    } else {
        reservationService.make(reservation);
        status.setComplete();   // Expires the session
        return "redirect:successfulReservation";
    }
}

@RequestMapping("successfulReservation")
public String reservationSuccess() {
    System.out.println("Called");
    return "reservationSuccess";
}

现在,当我部署应用程序时,访问url:

http://localhost:8080/springmvc/reservationForm?age=21

表单显示在 reservationForm.jsp 中。在我点击该表单中的提交按钮后,将调用submitForm()方法。

问题是,在该方法中,如果验证成功,则else块中的return语句:

return "redirect:successfulReservation"

无效。它显示 HTTP状态-404

提交表单后,浏览器中显示的网址是:

http://localhost:8080/springmvc/successfulReservation?sportTypes=TENNIS&sportTypes=SOCCER

我不明白这两个请求属性是如何出现在查询字符串中的。

当我测试是否调用与 successfulReservation 对应的方法handler reservationSuccess()时,我看到它没有被调用。由于这个原因,视图没有得到解决。

此外,在Eclipse控制台中,它显示警告:

WARNING: No mapping found for HTTP request with URI [/springmvc/successfulReservation] in DispatcherServlet with name 'court'

我无法理解可能出现的问题。 我在配置文件中添加了<context:component-scan>

这是我配置的视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

此外,似乎该书中的例子并不完整。他们还没有为重定向的网址定义reservationSuccess()方法。那是我自己添加的。

有人能帮帮我,出了什么问题吗?

我试图尽可能多地压缩相关信息。如果您想了解更多信息,请询问。我将添加。

1 个答案:

答案 0 :(得分:2)

您似乎应该重定向到/reservationForm/successfulReservation

由于该方法在控制器内,并且控制器也有请求映射,因此该方法的请求映射可能与控制器的映射无关。