Допустим, у меня есть объект:
@Entity
@Table(name = "Building")
@Data
public class Building {
@Id
@Column(name = "buildingId")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer buildingId;
@OneToOne(cascade = {CascadeType.MERGE}
@JoinColumn(name = "buildingType")
private BuildingType buildingType;
//...
}
В моем контроллере я поместил все типы зданий в модель:
@RequestMapping("/addBuilding")
public String newBuilding(Model model, @ModelAttribute Building building){
model.addAttribute("buildingTypes", buildingTypeService.getBuildingTypes()); //gives me an ArrayList<BuildingType>
}
Теперь я хочу перебрать типы зданий вположить их в раскрывающемся списке <select>
:
<form class="some-form" method="post" th:action="@{/addBuilding}">
<select id="type" class="some-class" required>
<option th:each="buildingType : ${buildingTypes}" th:text="${buildingType.name}"></option>
</select>
<button type="submit" class="button">Store</butto>
</form>
Это прекрасно работает. Но когда я пытаюсь получить выбранный тип здания:
<form class="some-form" method="post" th:action="@{/addBuilding}" th:object="${building}">
<select id="type" class="some-class" th:field="*{buildingType}" required>
<option th:each="buildingType : ${buildingTypes}" th:value="${buildingType}" th:text="${buildingType.name}"></option>
</select>
<button type="submit" class="button">Store</button>
</form>
Мой контроллер не получает объект, кроме строки:
@RequestMapping("/addBuilding")
public String newBuilding(Model model, @ModelAttribute Building building){
//...
System.out.println((building.getBuildingType() instanceof BuildingType)); //false
}
Возможно ли получить объект из Thymeleaf? Или необходимо создать примитивное переходное поле (например, String) для BuildingType, вернуть его из Thymeleaf и выполнить поиск в контроллере для BuildingType на основе этого поля?