我正在尝试构建一个小型qcm应用程序:
你的测验有多个问题,因此有多个可能的答案。用户只能在所有答案中选择一个(使用单选按钮)。
用户提交表单,但现在我试图检索用户在服务器上选择的答案,但我不知道该怎么做,因为这些字段是动态的。
<form method="post" th:action="@{/score}" class="qcm-questions">
<input type="hidden" name="id_quiz" th:value="${id_quiz}" />
<input type="hidden" name="pseudo" th:value="${pseudo}" />
<fieldset class="qcm-questions-item" th:each="question: ${questions}">
<h2 th:text="${question.getLabel()}"></h2>
<small th:text="'Question ' + ${questionStat.index}"></small>
<div th:each="answer: ${question.getAnswers()}">
<label th:text="${answer.getLabel()}" th:for="${answer.getId_answer()}"></label>
<input type="radio" th:id="${answer.getId_answer()}" th:name="${question.getId_question()}" th:value="${answer.getId_answer()}" />
</div>
</fieldset>
<button>Soumettre QCM</button>
</form>
我找到的唯一方法是:
@PostMapping
public String registerScore(@RequestParam("id_quiz") final long id_quiz, @RequestParam("pseudo") final String pseudo, ServletRequest request) {
Map<String, String[]> answers = request.getParameterMap();
answers.remove("id_quiz");
answers.remove("pseudo");
return "page";
}
也许你有更好的主意?
1条答案
按热度按时间jc3wubiy1#
可以通过参数或模型属性从窗体检索输入。我发现个人模型属性解决方案更容易,下面是这样做的代码。
我已经创建了两个传递给控制器的modeldattributes。第一个将包含所有的测验细节,第二个将是你表格中收集的答案。modelattributes是对象,当然可以调整实体。
主要方法是创建一个测验,每个问题有2个问题和3个答案。它还创建了一个用假数据初始化的resultquiz。方法得分是通过对象resultquiz检索测验结果。
在域的类下面(为了简洁起见,省略了getter/setter/constructor):
然后使用thymeleaf为html页面编写代码。th:object表示链接到窗体的对象。然后可以直接绑定数据。
要使用thymeleaf访问属性的值,您只需要指示它的名称。
iter变量给出了每次迭代的索引。
最后是score html页面的代码: