如何使用spring mvc在一个表单中包含许多对象或模型

时间:2017-03-30 19:59:07

标签: spring spring-mvc

我必须为两个modelAttributes使用一个表单:“groupes”这是Groupe的列表,“matieres”是Matiere的列表,我知道一个表单只支持一个modelAttribute,我尝试了两个选项,但两者都没有工作,一个使用弹簧绑定标签,另一个通过将groupe和matieres包裹在一个类中, 任何想法如何解决这个问题?

@RequestMapping(method = RequestMethod.GET)
public ModelAndView showForm() {
ModelAndView mv = new ModelAndView("abs");

    mv.addObject("matiere", matiereservice.findAlmatieres());
    mv.addObject("groupe", groupeservice.findAllGroupes());

    return mv;
}

@RequestMapping( method = RequestMethod.POST)
public String submitForm( @ModelAttribute("groupe") Groupe groupe, @ModelAttribute("matiere") Matiere matiere,
        ModelMap map,
        BindingResult result
         ) {
           // BindingResult treatment

    return "listeleve" ;
}

1 个答案:

答案 0 :(得分:0)

不要单独发送这些属性,只需创建一个DTO类,其中包含ListGroupe类的Matiere个字段。

public class ListeleveDTO {
    private List<Groupe> groupe;
    private List<Matiere> matiere;

    public ListeleveDTO(List<Groupe> groupe, List<Matiere> matiere) {
        // Assign to fields
    }
    // getters and setters
}

并将此类的实例设置为模型属性。

@RequestMapping(method = RequestMethod.GET)
public ModelAndView showForm() {
ModelAndView mv = new ModelAndView("abs");

    mv.addObject("listeleveDTO", new ListeleveDTO(groupeservice.findAllGroupes(), matiereservice.findAlmatieres());

    return mv;
}

@RequestMapping( method = RequestMethod.POST)
public String submitForm( @ModelAttribute("listeleveDTO") ListeleveDTO,
        ModelMap map,
        BindingResult result
         ) {
           // BindingResult treatment

    return "listeleve" ;
}