我的项目使用Spring Boot和JPA,MySQL和Thymeleaf。我似乎无法通过存储在DTO中的对象列表在视图内迭代,该对象作为模型属性传递给视图。
以下是DTO的相关内容:
public class Form {
private SimpleModel simpleModel = new SimpleModel();
private List<Cities> listOfCities;
//......getters and setters
}
以下是城市模型:
@Entity
@Table(name="Cities")
public class Cities {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id_city;
@Column(name="name")
private String name;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_country")
private Countries id_country;
//getters and setters
}
这是控制器:
@GetMapping("/simple")
public String simpleGet(Model model) {
Form form = new Form();
form.setCities(citiesService.all());
model.addAttribute("form", form);
return "simple";
}
最后,这是观点:
<form action="#" th:action="@{/simple}" method="POST" th:object="${form}">
<input type="text" th:field="*{simpleModel.userName}">
<select name="id_city">
<option th:each="city : ${listOfCities}" th:value="${city.id_city}" th:text="${city.name}"></option>
</select>
<input type="submit" value="Assign">
</form>
我在“form.setCities(citiesService.all());”之后检查了控制器内部通过在for循环中打印到控制台并且数据在那里,但是在视图中,我没有得到任何东西,选择列表是空的,没有选项元素。如何访问数据?
答案 0 :(得分:0)
您的表单需要包含城市列表。您可以在return语句之前将listOfCities
添加到模型中:
model.addAttribute("listOfCities", form.getListOfCities());
除了:
Cities
是一个城市列表吗?因为你有name
的字符串,所以看起来它没有被正确命名。您可能希望将其更改为City
和id
。然后,您的方法变为getCity().getId()
而不是getCities().getId_city()
。同样适用于Countries
。或者,请查看使用Project Lombok中的@Data
和@Builder
。