TransWikia.com

Передача данных из формы в Spring MVC

Stack Overflow на русском Asked on November 13, 2021

Делаю страницу с вопросами (тесты). Имеется два класса модели:

public class Answers {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;

@Column(name = "answer")
private String answer;

@Column(name = "flag")
private int flag;

@Column(name = "id_question")
private int QuestionId;

// getters and setters.

}


public class Questions {

@Id
@GeneratedValue()
@Column(name = "id")
private int id;

@Column(name = "question")
private String question;

@Column(name = "lesson")
private int lesson;

// getters and setters.

}

DAO классы и сервис, с двумя Utility классами который тасует вопросы и ответы.

На выходе при передаче данных на представление получается такая структура:

Map<Questions, List<Answers>>

И я спокойно развертываю её на представлении.

<c:url var="testAction" value="/test/check"/>

<form:form action="${testAction}" modelAttribute="questions" method="post">
    <c:forEach items="${questions}" var="questions">
        <h3>${questions.key.question}</h3>
            <c:forEach items="${questions.value}" var="answers">
                <label for="radio">${answers.answer}</label>
                <input type="radio" name="${questions.key.id}" 
value="${answers.id}" id="radio"/>
                <br>
            </c:forEach>
    </c:forEach>

    <br>

    <input type="submit" value="Отправить"/>
</form:form>

Но когда дело доходит до передачи этих данных из формы, я начинаю задумываться, а как же их принять?

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String getTestPage(Model model) {
    model.addAttribute("questions", testPageService.getListQuestions());

    return "test";
}

@RequestMapping(value = "/test/check", method = RequestMethod.POST)
public String getTestCheckPage(???) {


    return "testcheck";
}

Буду очень признателен, если кто-нибудь подскажет, как это можно реализовать. А если нет, то в какую сторону смотреть, и в каком виде лучше всего реализовывать структуру данных.

UPD. Сгенерированный JSP код.

<form id="questions" action="/test/check" method="post">

    <h3>Сколько будет 2 + 2 * 2?</h3>
    
        <label for="radio">7</label>
        <input type="radio" name="4"
               value="5" id="radio"/>
        <br>
    
        <label for="radio">8</label>
        <input type="radio" name="4"
               value="4" id="radio"/>
        <br>
    
        <label for="radio">6</label>
        <input type="radio" name="4"
               value="6" id="radio"/>
        <br>
    

    <h3>Сколько будет 2 + 2?</h3>
    
        <label for="radio">2</label>
        <input type="radio" name="3"
               value="2" id="radio"/>
        <br>
    
        <label for="radio">5</label>
        <input type="radio" name="3"
               value="1" id="radio"/>
        <br>
    
        <label for="radio">4</label>
        <input type="radio" name="3"
               value="3" id="radio"/>
        <br>
    


        <br>

        <input type="submit" value="Отправить"/>
</form>

One Answer

Вам надо на выходе использовать что-то наподобие

<input type="radio" name="questions[${questions.key.id}]" value="${answers.id}" id="radio"/>

а на входе использовать

public String getTestCheckPage(@ModelAttribute("questions") HashMap<String, String> questions) {

Answered by Roman C on November 13, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP