How to update two entities/model elements from one jsp in Spring MVC?

自作多情 提交于 2019-12-06 03:03:32

It's a common practice to put any number of objects in a wrapper class and use this one to submit data with a single form. Additionally, you can use JSR-303 validation in any of objects:

public class MyForm {

    @Valid
    private UserDetails userDetails;

    @Valid
    private EmploymentDetails employmentDetails;

    ...

}

your form:

<form:form modelAttribute="myForm" method="post">
    <form:input path="userDetails.property1"/>
    <form:input path="userDetails.property2"/>
    <form:input path="employmentDetails.property1"/>
    <input type="submit" value="create"/>
</form:form>

and your controller:

@RequestMapping(value = "/", method = RequestMethod.POST)
public ModelAndView create (@Valid MyForm myForm, BindingResult bindingResult) {

    if (bindingResult.hasErrors()) {
        // here you can retrieve form errors of both objects
    }

    UserDetails userDetails = myForm.getUserDetails();
    EmploymentDetails employmentDetails = myForm.getEmploymentDetails();

    ...

}

Another approach is to save objects via JSON, but I think is overkill and overcomplicated in this case.

Could try mapping each object to different model attribute:

public String create(@Valid @ModelAttribute(value="UserDetails") UserDetails userDetails,
   @Valid @ModelAttribute(value="EmploymentDetails") EmploymentDetails employmentDetails, 
   BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest)  
{

In the form, these should be bound to different prefixes, eg:

<form:input path="UserDetails.name" />
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!