Thymeleaf: получить объект из формы - PullRequest
0 голосов
/ 07 октября 2019

Допустим, у меня есть объект:

@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 на основе этого поля?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...