In my Spring MVC application I need to implement a dynamic questionnaire form: I have N questions and for each I have 3 options.
So in my page I\'ll have something like
how to post data and handle ModelAttribute binding in this scenario
you can do,
i am considering Question class like:
public class Question {
private String question;
private Map optionMap;
private Integer selectedOptionKey;
//getters and setters
}
and Option class like:
public class Option {
private Integer optionKey;
private String optionText;
//getters and setters
}
and one QuestionsModel class for form binding like:
public class QuestionsModel {
private Map questionMap;
//getters and setters
}
and inside Controller class GET handler method, populate questions for example:
@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 optionMap = new HashMap();
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 questionMap = new HashMap();
questionMap.put(1, question1);
questionMap.put(2, question2);
questionMap.put(3, question3);
model.addAttribute("questionsModel", new QuestionsModel(questionMap));
return "index";
}
finally in jsp page use
Question
Options
you can receive binding and model in POST like:
@RequestMapping(value="/questionPost", method=RequestMethod.POST)
public String indexPost(@ModelAttribute("questionsModel") QuestionsModel questionModel, BindingResult result){
System.out.println(questionModel.getQuestionMap());
return "redirect:/";
}