2013-06-22 53 views
0

我按照書中的應用示例 - 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。我已經自己添加了。

有人可以幫助我,這是怎麼回事?

我試圖壓縮儘可能多的相關信息,因爲我可以在這裏。如果你想要更多的信息,請問。我會補充。

+0

@BheshGurung。謝謝。這工作:)但沒有任何方法來保持沒有'reservationForm'的網址。當我使用'/ successfulReservation'請求映射在不同的控制器中移動該方法時,它只與'/ successfulReservation'一起工作。是不是有任何懷疑,保持在同一個conroller的方法? –

+0

@BheshGurung。無論如何,你可以添加它作爲答案,以便我可以接受它。 –

+0

*是否有任何wy,將該方法保留在同一個控制器中?* - 不確定那個:)。發表評論作爲答覆。 –

回答

2

看起來你應該重定向到/reservationForm/successfulReservation。由於該方法在控制器內,並且控制器也具有請求映射,所以該方法的請求映射不是獨立於控制器的請求映射。