1

Spring mvc で mcq を実行したい。クラス Answer と OneToMany 関係にあるクラス Question と OneToMany 関係を持つクラス Mcq があります。したがって、Mcq はプロパティとして Arraylist ListOfQuestions を持ち、Question は Arraylist ListOfAnswers を持ちます。

私のコントローラーは

    @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' not supported」というエラーが表示され、displayMcq の外観にとどまります。

では、問題を説明して、mcq を正しく処理し、チェック済みの回答を返すのを手伝ってもらえますか?

4

2 に答える 2

1

コントローラー メソッドが異なる URL にマップされていることに注意してください ( valuePOST メソッドに属性がないため)。

actionに属性がないため<form:form>、送信時に現在のページの URL に POST 要求を送信しますが、その URL への POST 要求を処理するコントローラー メソッドがありません。

したがって、POST メソッドを GET メソッドと同じ URL にマップする必要があります。

@RequestMapping(value="displayMcq", method = RequestMethod.POST)
public String displayQcmRepondu(...) { ... }
于 2012-08-09T10:33:55.037 に答える
0

ありがとう、これで 1 つの問題は解決しましたが、検証すると、「プロパティの型 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>
于 2012-08-09T21:36:11.657 に答える