如何在SpringMVC中从一个jsp更新两个实体/模型元素



我的要求是通过在JSP中为用户提供一个表单来执行CREATE操作,该表单包含来自两个实体的输入字段(例如UserDetailsEmploymentDetails

使用单个提交在单个jsp中更新两个表单的最有效方法是什么?

我知道的一种方法是将两个实体组合成一个包装类,然后将该对象作为Model发送。这是唯一的解决方案吗?

请引导。

在一个包装类中放入任意数量的对象并使用此对象以单个表单提交数据是一种常见的做法。此外,您可以在以下任何对象中使用JSR-303验证:

public class MyForm {
    @Valid
    private UserDetails userDetails;
    @Valid
    private EmploymentDetails employmentDetails;
    ...
}

您的表格:

<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>

和你的控制器:

@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();
    ...
}

另一种方法是通过JSON保存对象,但我认为在这种情况下过于复杂。

可以尝试将每个对象映射到不同的模型属性:

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

在表单中,这些应该绑定到不同的前缀,例如:

<form:input path="UserDetails.name" />

最新更新