2012-08-09 8 views
1

我想用Spring mvc做一個mcq。我有一個類Mcq與類Question的OneToMany關係,它與Answer類具有OneToMany關係。因此Mcq擁有一個Arraylist ListOfQuestions屬性和一個Arraylist ListOfAnswers問題。錯誤「不支持請求方法的POST」與窗體:複選框

我的控制器是

@RequestMapping(value="displayMcq", method = RequestMethod.GET) 
public String showMcq(Model model) { 
    Mcq mcq = mcqService.findById(new Long(1)); 
    model.addAttribute("mcq", mcq); 
return "displayMcq"; 
} 

@RequestMapping(method = RequestMethod.POST) 
public String displayQcmRepondu(@ModelAttribute("mcq2") Mcq mcq, BindingResult binding, SessionStatus status) {  
    if (binding.hasErrors()) { 
     return "displayMcq"; 

} else { 
    status.setComplete(); 
    return "redirect:/mcqSuccess/"; 
    } 
} 

和我的視圖displayMcq.jsp是

<form:form modelAttribute="mcq" method="POST"> 
     <ol> 
      <c:forEach items="${mcq.listOfQuestions}" var="question"> 
       <li> 
        <c:out value="${question.label}" /> 
        <br /> 
        <ul> 
         <c:forEach var="answer" items="${question.listOfAnswers}"> 
          <form:checkbox path="listOfQuestions" value="answer.id" label="${answer.label}" /> 
          <br /> 
         </c:forEach> 
        </ul> 
       </li> 
      </c:forEach> 
     </ol> 
     <input type="submit" value="Validate" /> 
    </form:form> 

我MCQ公顯示,但窗體的處理失敗。我留在displayMcq外觀上,出現錯誤「Etat HTTP 405 - 請求方法'POST'不受支持」。

所以,你能解釋我的問題,幫助我正確地處理我的mcq並返回檢查的答案?

回答

1

請注意,您的控制器方法被映射到不同的URL(由於您的POST方法缺少value屬性)。

由於<form:form>中沒有action屬性,因此它會在提交時向當前頁面的URL發送POST請求,但是您沒有控制器方法來處理對該URL的POST請求。

所以,你需要你的POST方法映射到相同的URL的GET方法:

@RequestMapping(value="displayMcq", method = RequestMethod.POST) 
public String displayQcmRepondu(...) { ... } 
0

謝謝,這解決了一個問題,但是當我確認,我有一個像「失敗的消息錯誤將類型java.lang.String []的屬性值轉換爲屬性...所需的類型java.util.List。

所以我修改了控制方法

@RequestMapping(value="displayQcm", method = RequestMethod.POST) 
public String displayQcmRepondu(@ModelAttribute ("mcqProcess") Mcq mcq, BindingResult binding, Model model, SessionStatus status) {  
    model.addAttribute("mcqProcess", mcq); 
    status.setComplete(); 
    return "mcqSuccess"; 
} 

,我想,以顯示mcqSuccess.jsp選中的答案,但沒有提交的MCQ。我顯示頁面,但是正確寫入文本。

如果它可以幫助時,mcqSuccess是

<h2>MCQ submitted</h2> 
    <ol> 
     <c:forEach items="${mcqProcess.listOfQuestions}" var="question"> 
      <li> 
       <c:out value="${question.label}" /> 
       <br/> 
        <ul> 
         <c:forEach var = "answer" items = "${question.listOfAnswers}"> 
          <c:if test = "${answer.correct}">        
          <c:out value = "${answer.label}" /> 
          </c:if> 
          <br/> 
         </c:forEach> 
        </ul> 
      </li> 
     </c:forEach> 

    </ol> 
</div> 
相關問題