如何使用thymeleaf使用springboot正确设计“将对象添加到列表”

时间:2019-02-16 05:46:29

标签: spring-boot spring-mvc thymeleaf

我有两个类Food和FoodType:

public class Food {
    //other attributes and constructor and getters and setters are ignored

    @ManyToMany(targetEntity = FoodType.class, fetch = FetchType.LAZY)
    @JoinTable(name = "food_type_",
        joinColumns = {@JoinColumn(name = "fid")},
        inverseJoinColumns = {@JoinColumn(name = "tid")})
    private List<FoodType> types = new ArrayList<>();

}

public class FoodType {
    @Id
    @GeneratedValue
    private long id;

    private String type;

    @ManyToMany(targetEntity = Food.class, fetch = FetchType.LAZY, mappedBy = "types")
    private List<Food> foodList = new ArrayList<>();
    //constructor and getters and setters are ignored
}

要求是:应该允许用户通过视图添加新食品,因此我想知道如何在视图中向Food添加FoodType?

我已经读过这个answer,在视图中操作数据似乎不是一个好主意,因此,如果您是程序员,将如何设计MVC层以使其能够满足要求好吗

PS:我对JS知之甚少,有可能在Thymeleaf中做到吗?

1 个答案:

答案 0 :(得分:0)

您应该遵循 MVC分层体系结构,以正确实现所需的目标。作为一般设计准则:

  1. UI 与表单和所需输入一起呈现给用户。这是百里香叶的一部分。 (查看层)
  2. 使用 Controllers 来捕获表单发布数据,验证输入等。
  3. 编写一个业务层代码,以获取“已发布”数据并保存对象等。
  4. 使用 服务和存储库接口 来实现基本的CRUD和类似操作。

最后一句话;将多个FoodType保存到单个Food对象的操作如下(在控制器或业务逻辑层中,您可以这样做):

Food aFood = new Food(); // Empty Food to save
aFood.types.add(new FoodType(id, "Pizza"));
aFood.types.add(new FoodType(id, "Burger"));
foodService.save(aFood); // Assuming you are using Service Layer