Bind a list of radio buttons with Spring and Thymeleaf

霸气de小男生 提交于 2021-01-29 09:20:16

问题


my problem is that I need to get the radio buttons that are selected in HTML file and use it in the PostMapping.

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Do Test Excercise</title>
    <script language="javascript">
    </script>
</head>
<body>
<h1>Do Test Exercise</h1>
<form method="POST">
        <span align="left" th:each="question : ${exercise.getQuestions()}">
            <p valign="top" th:text="${question.text}">Text</p>
            <tr align="left" th:each="solution : ${question.getSolutions()}">
                <input width="5%" type="radio" th:name="${question.question_ID}" th:text="${solution.text}"
                       th:value="${solution.text}"/><BR>
            </tr>
        </span>
    <input type="submit" value="Submit">
</form>
</body>
</html>

However I don't know how to get that values for the radio buttons and save it in a array of String

@GetMapping("doTest/{post}/{exercise}")
public String doTest(Model model, @PathVariable String exercise) {
    model.addAttribute("exercise", exercisesDAO.getExerciseByType(exercise, "Test"));
    return "exercise/doTestExercise";
}

@PostMapping("doTest/{post}/{exercise}")
public String doTest(@RequestParam(value = "solution") String[] solution, @PathVariable String post, @PathVariable String exercise, RedirectAttributes redirectAttributes) {
    exercisesDAO.solve(exercise, solution, "admin", "Test");
    redirectAttributes.addAttribute("post", post);
    redirectAttributes.addAttribute("exercise", exercise);
    return "redirect:/showMark/{post}/{exercise}";
}

Thanks


回答1:


You need to change the name of your inputs from th:name="${question.question_ID}", to th:name="${'solution['+ question.question_ID + ']'}". After that, you need to change your controller, so that instead of an array of Strings, it will receive a HashMap, where you will get for each id, the chosen solution.

Form

<form method="POST" th:action="@{doTest/${post.id}/${exercise.id}}">
        <span align="left" th:each="question : ${exercise.getQuestions()}">
            <p valign="top" th:text="${question.text}">Text</p>
            <tr align="left" th:each="solution : ${question.getSolutions()}">
                <input width="5%" type="radio" th:name="${'solution['+ question.question_ID + ']'}" th:text="${solution.text}" th:value="${solution.text}"/><BR>
            </tr>
        </span>
    <input type="submit" value="Submit">
</form>

Controller

@PostMapping("doTest/{post}/{exercise}")
public String doTest(@RequestParam(value = "solution") HashMap<String, String> solutions, @PathVariable String post, @PathVariable String exercise, RedirectAttributes redirectAttributes) { ... }


来源:https://stackoverflow.com/questions/53244936/bind-a-list-of-radio-buttons-with-spring-and-thymeleaf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!