我按照書中的應用示例 - Spring Recipes的第8-10節。我陷入了一個問題。 我會盡量保持簡短。前綴「redirect:」無法解析視圖
我已經包含以下字段預訂豆:
String courtName, Date date, int hour, Player player, SportType sportType
球員豆只包含兩個字段 - 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";
}
現在,當我部署應用程序,並訪問網址:
http://localhost:8080/springmvc/reservationForm?age=21
窗體顯示從reservationForm.jsp。在我點擊提交按鈕後,submitForm()
方法會被調用。
的問題是,在該方法中,如果驗證成功,返回語句else
塊:
return "redirect:successfulReservation"
不工作。它顯示了一個HTTP狀態404。
在瀏覽器中顯示我提交表單後的網址是:
http://localhost:8080/springmvc/successfulReservation?sportTypes=TENNIS&sportTypes=SOCCER
我不明白那些2個請求屬性是如何進來的查詢字符串。
當我測試方法處理程序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()
方法重定向 url。我已經自己添加了。
有人可以幫助我,這是怎麼回事?
我試圖壓縮儘可能多的相關信息,因爲我可以在這裏。如果你想要更多的信息,請問。我會補充。
@BheshGurung。謝謝。這工作:)但沒有任何方法來保持沒有'reservationForm'的網址。當我使用'/ successfulReservation'請求映射在不同的控制器中移動該方法時,它只與'/ successfulReservation'一起工作。是不是有任何懷疑,保持在同一個conroller的方法? –
@BheshGurung。無論如何,你可以添加它作爲答案,以便我可以接受它。 –
*是否有任何wy,將該方法保留在同一個控制器中?* - 不確定那個:)。發表評論作爲答覆。 –