在此方案中,如何发布数据和处理 ModelAttribute 绑定
你可以做到,
我正在考虑这样的课程:Question
public class Question {
    private String question;
    private Map<Integer,Option> optionMap;
    private Integer selectedOptionKey;
        //getters and setters
}
和类像:Option
public class Option {
    private Integer optionKey;
    private String optionText;
    //getters and setters
}
和一个用于表单绑定的类,如下所示:QuestionsModel
public class QuestionsModel {
    private Map<Integer, Question> questionMap;
    //getters and setters
}
和控制器类处理程序方法内部,填充问题,例如:GET
@RequestMapping(method=RequestMethod.GET)
    public String index(Model model){                
    Option optionA = new Option(1, "A");
    Option optionB = new Option(2, "B");
    Option optionC = new Option(3, "C");
    Map<Integer, Option> optionMap = new HashMap<Integer, Option>();
    optionMap.put(optionA.getOptionKey(),optionA);
    optionMap.put(optionB.getOptionKey(),optionB);
    optionMap.put(optionC.getOptionKey(),optionC);
    Question question1 = new Question("A Q", optionMap, 1);
    Question question2 = new Question("B Q", optionMap, 1);
    Question question3 = new Question("C Q", optionMap, 1);
    Map<Integer, Question> questionMap = new HashMap<Integer, Question>();
    questionMap.put(1, question1);
    questionMap.put(2, question2);
    questionMap.put(3, question3);
    model.addAttribute("questionsModel", new QuestionsModel(questionMap));
    return "index";
}
最后在jsp页面中使用保留旧值,并呈现表单元素,例如:<form:hidden..
<c:url value="/questionPost" var="postUrl"/>
<form:form action="${postUrl}" modelAttribute="questionsModel" method="post">
    <table>
    <tr>
        <th>Question</th>
        <th>Options</th>        
    </tr>   
    <c:forEach items="${questionsModel.questionMap}" var="currQue" varStatus="queIndex">
        <tr>
            <td>
                <form:hidden path="questionMap[${queIndex.count}].question"/>
                <label>Question:</label><c:out value="${currQue.value.question}"/><br/>
            </td>
            <td>
            <c:forEach items="${currQue.value.optionMap}" var="opt" varStatus="optionIndex">
                <form:hidden path="questionMap[${queIndex.count}].optionMap[${optionIndex.count}].optionText"/>
                <form:hidden path="questionMap[${queIndex.count}].optionMap[${optionIndex.count}].optionKey"/>
                <form:radiobutton path="questionMap[${queIndex.count}].selectedOptionKey"
                    value="${opt.value.optionKey}" label="${opt.value.optionText}"/>
            </c:forEach>
             </td>
        </tr>
    </c:forEach>
    </table>
    <input type="submit"/>
</form:form>
您可以在POST中接收绑定和模型,例如:
@RequestMapping(value="/questionPost", method=RequestMethod.POST)
public String indexPost(@ModelAttribute("questionsModel") QuestionsModel questionModel, BindingResult result){
    System.out.println(questionModel.getQuestionMap());
    return "redirect:/";
}