我遵循了本书的应用示例-Spring Recipes,第8-10节。我陷入了一个问题。
我会尽量简短。
我的保留豆包含以下字段:
String courtName, Date date, int hour, Player player, SportType sportType
Player bean仅包含两个字段-
name
和age
。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 Status-404。
提交表单后,浏览器中显示的网址是:
http://localhost:8080/springmvc/successfulReservation?sportTypes=TENNIS&sportTypes=SOCCER
我不明白这两个请求属性是如何出现在查询字符串中的。
当我测试是否调用了与successReservation相对应的方法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>
另外,这本书中的示例似乎并不完整。他们还没有为重定向的URL定义
reservationSuccess()
方法。我自己添加的。有人可以在这里帮助我,怎么了?
我已经在这里尝试了尽可能多的相关信息。如果您需要更多信息,请询问。我会补充。
最佳答案
看起来您应该重定向到/reservationForm/successfulReservation
。
由于该方法在控制器内,并且控制器也具有请求映射,因此方法的请求映射可能与控制器无关。