Dynamic form and data binding with Spring MVC

后端 未结 2 1685
予麋鹿
予麋鹿 2021-02-04 08:44

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

2条回答
  •  天命终不由人
    2021-02-04 09:22

    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 to keep old values, and render form elements like:

    
    
    
        
            
    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:/";
    } 
    

提交回复
热议问题