Forms SpringMVC-处理表单最佳实践-编写特定的表单类还是使用实体类?

Forms SpringMVC-处理表单最佳实践-编写特定的表单类还是使用实体类?,forms,spring,spring-mvc,Forms,Spring,Spring Mvc,学习Spring(3.1.0)和Hibernate(4.1.1)。只是想知道大多数开发人员在处理表单数据时会做什么。在编写包含用于提交数据的表单的JSP时,您通常是编写特定于该表单上的输入字段的类并处理该服务器端,还是只使用实体类并将它们绑定到表单上的元素 假设我有一个应用程序,它有3个实体类:Location、StoreType和Store(一个Store有一个StoreType和一个Location)。在/createstorejsp页面的表单上,我有一个包含所有位置的下拉选择框,另一个包含

学习Spring(3.1.0)和Hibernate(4.1.1)。只是想知道大多数开发人员在处理表单数据时会做什么。在编写包含用于提交数据的表单的JSP时,您通常是编写特定于该表单上的输入字段的类并处理该服务器端,还是只使用实体类并将它们绑定到表单上的元素

假设我有一个应用程序,它有3个实体类:Location、StoreType和Store(一个Store有一个StoreType和一个Location)。在/createstorejsp页面的表单上,我有一个包含所有位置的下拉选择框,另一个包含所有存储类型的下拉选择框,以及包含存储名称、存储管理器等的其他文本输入字段


您是否创建了一个带有List locationNames、List storeTypes、String storeName等的CreateStoreForm类,并将其放在模型上?还是将所有不同的实体类分别放在模型上?我一直在使用后一种方法,但我认为前者可能更好,特别是当用户连续向同一屏幕发出请求时,前者可能更适合重新填充屏幕。

您提到的两种方法都很好。但是选择它们是基于你的需求。 在您的问题中提到的情况下,第二种方法更好,因为您传递的两个列表LocationName和StoreType只是引用字段。在实际模型类中(具有storeName和storeManager字段)必须同时包含location和storeType的id

因此,当您提交表单时,只有具有存储属性的模型类才会存储在数据库中。其他列表字段只是引用数据,您不会将其与其他字段一起存储在数据库中


希望这对你有帮助。干杯。

最好有一个映射表单的类,然后编写一个util方法,将表单类转换为Hibernate用于执行操作的实际模型类

对于下拉列表,您可以在一个方法上单独使用
@modeldattribute
,该方法返回列表,并且可以在表单中使用。您不需要将其添加到表单类或实体类中

@Controller
public class MyController {
    @ModelAttribute("productsList")
    public Collection<Product> populateProducts() {
        return this.productsService.getProducts();
    }
    // @RequestMapping etc omitted for brevity
}
@控制器
公共类MyController{
@ModelAttribute(“productsList”)
公共集合populateProducts(){
返回此.productsService.getProducts();
}
//为简洁起见,省略@RequestMapping等
}