Вариант с тимьяном без выбора - PullRequest
0 голосов
/ 29 мая 2019

Из контроллера я возвратил объект, содержащий список объектов. Я хочу отобразить этот список объектов в раскрывающемся списке без предварительного выбора (или значения по умолчанию, т.е. «Выбрать блюдо»), но раскрывающийся список отображается с предварительно выбранным последним значением в списке.

Контроллер:

@GetMapping(path = "/createOrder")
public ModelAndView displayOrder(OrderFormDetails order) {
    ModelAndView mav = new ModelAndView();
    mav.addObject("order", orderService.displayOrder());
    mav.setViewName("createOrder");
    return mav;
}

Модель:

public class OrderFormDetails {

    @NotEmpty(message = "*Please provide your name")
    private String name;

    @NotEmpty(message = "*Please provide your address")
    private String address;

    private List < Dish > dishes;

Вид:

<select class="form-control" th:field="*{dishes}" id="dropOperator">
    <option value="" selected="selected">Sélect dish</option>
    <option th:each="dish, itemStat : *{dishes}" th:value="*{dishes[__${itemStat.index}__].id}" th:text="*{dishes[__${itemStat.index}__].title}">
    </option>
</select>

Я попробовал несколько трюков, но ни один из них не сработал. Спасибо ...

1 Ответ

0 голосов
/ 29 мая 2019

Обычно вы не хотите смешивать возможные опции и выбранную опцию вместе в одном поле (как вы, очевидно, и сделали).Все, что вам нужно сделать, это отделить эти вещи.Возможные шаги могут быть полезны:

  1. Поскольку 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> создаются из отдельной коллекции, представленной как атрибут модели .

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