2012-08-09 11 views
1

mcq를 Spring mvc와 함께 사용하고 싶습니다. Class One과 OneToMany 관계가있는 클래스 Mcq 클래스가 있습니다.이 클래스에는 Answer 클래스와 OneToMany 관계가 있습니다. 따라서 Mcq은 속성으로 Arraylist ListOfQuestions, Arraylist List에 질문한다.폼에서 "Request method POST not supported"오류가 발생했습니다. 체크 박스

내 컨트롤러는

@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이 잘 표시되어 있지만 양식의 처리는 실패합니다. 나는 "Etat HTTP 405 - Request method 'POST'가 지원되지 않음"이라는 오류 메시지와 함께 displayMcq 모양을 유지합니다.

그럼, 제게 문제를 설명해 주시겠습니까? 제 mcq를 올바르게 처리하고 점검 응답을 보내 주시겠습니까?

답변

1

컨트롤러 메서드가 다른 URL에 매핑된다는 점에 유의하십시오 (POST 메서드에 value 특성이 없기 때문).

<form:form>action 속성이 없기 때문에 제출시 현재 페이지의 URL로 POST 요청을 보내지 만 해당 URL에 대한 POST 요청을 처리 할 컨트롤러 메소드가 없습니다.

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

감사합니다, 하나의 문제를 해결,하지만 난 검증 할 때, 나는에 실패했습니다 "와 같은 메시지 오류가 발생했습니다 :

그래서, 당신은 당신의 GET 방식과 동일한 URL에 POST 메소드를 매핑해야 java.lang.String []의 프로퍼티 값을 프로퍼티의 필수 타입 java.util.List로 변환하십시오. ".

그래서 나는

내가 mcqSuccess.jsp에서 확인 응답을 표시 할
@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"; 
} 

으로 컨트롤러 방법을 수정하지만 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> 
입니다