Обычно вы не хотите смешивать возможные опции и выбранную опцию вместе в одном поле (как вы, очевидно, и сделали).Все, что вам нужно сделать, это отделить эти вещи.Возможные шаги могут быть полезны:
- Поскольку
OrderFormDetails
действует как компонент поддержки формы, он должен содержать заполнитель для выбранного значения (Dish.id
) вместо List
с возможными блюдами.Измените OrderFormDetails
на следующее:
public class OrderFormDetails {
@NotEmpty(message = "*Please provide your name")
private String name;
@NotEmpty(message = "*Please provide your address")
private String address;
private T selectedDish;
// getters, setters, rest of the class omitted
... где T
- тип, назначенный для поля Dish.id
.
Возможные (выбираемые) блюда должны предоставляться отдельно в качестве атрибута модели.Добавьте следующую строку к вашему
displayOrder
методу:
mav.addObject("dishes", getDishes());
... где getDishes()
возвращает List<Dish>
, содержащее все блюда, доступные для пользователя.
Настройте вид для работы с обновленным подходом:
<select class="form-control" th:field="*{selectedDish}" id="dropOperator">
<option value="" selected="selected">Sélect dish</option>
<option th:each="dish : ${dishes}" th:value="${dish.id}" th:text="${dish.title}">
</option>
</select>
Вот и все.Такой подход также показан в документации - th:field
на уровне <select>
относится к полю вспомогательного компонента формы, тогда как элементы <option>
создаются из отдельной коллекции, представленной как атрибут модели .