Подтвердить что ты не робот

Как заполнить выпадающий список с помощью thymeleaf и spring

Мне нужно заполнить выпадающее меню всеми значениями в списке строк.

Класс контроллера

@RequestMapping(value = "/generateIds", method = RequestMethod.GET)
public String launchPage(Model model) {
    List<Municipality> municipalities = rCountryService.finaAllMunicipalities();
    //assume the list is populated with values
    List<String> countryName = new ArrayList<String>();
    for(int i=0; i<municipalities.size(); i++) {
        countryName.add(municipalities.get(i).getCountry().toString());
    }
    model.addAttribute("countryName ", countryName );

    return "generateIds";
}

Я не знал, с чего начать для HTML, поэтому я начал с этого

<select th:field="*{countryName }">
    <option value="default">Select a country</option>
    <option th:each="${countryName }" th:value="${countryName }"th:text="${countryName }"/>
</select>

Как должен выглядеть мой html/controller, чтобы добавить все элементы списка в качестве раскрывающихся меню?

Заранее спасибо!

4b9b3361

Ответ 1

Вот как я заполняю выпадающий список. Я думаю, это может помочь вам получить представление об этом.

контроллер

List<Operator> operators =  operatorService.getAllOperaors()
model.addAttribute("operators", operators);

модель

  @Entity
  @Table(name = "operator")
  public class Operator {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    @JsonIgnore
    private Long id;

    @NotBlank(message="operator Name cannot be empty")
    @Column(name = "operator_name", nullable = false)
    private String operatorName;

    getters and setters ...

}   

Посмотреть

<div class="form-group blu-margin">
    <select class="form-control" th:field="${operator.opeId}"  id="dropOperator">
    <option value="0">select operator</option>
    <option th:each="operator : ${operators}" th:value="${operator.id}" th:text="${operator.operatorName}"></option>
    </select>
</div>

Ответ 2

Сначала спасибо вашему вопросу и ответу! Я сделал это решение.

Моя модель

@Entity
@Table(name = "test")
public class Test {

    @Id
    private String testCode;
    private String testName;
    private int price;

    public Test() {}

    public Test(String testCode, String testName, int price) {
        this.testCode = testCode;
        this.testName = testName;
        this.price = price;
    }

    public String getTestCode() {
        return testCode;
    }

    public String getTestName() {
        return testName;
    }

    public int getPrice() {
        return price;
    }
}

Мой взгляд

    List<Test> test = new ArrayList<>();
    model.addAttribute("test", test);
    List<Test> tests = testRepository.findAll();
    model.addAttribute("tests", tests);

Мой HTML

<div class="col-lg-3" th:object="${test}">
    <select class="form-control" id="testOrder" name="testOrder">
        <option value="">Select Test Order</option>
        <option th:each="test : ${tests}"
                th:value="${test.testCode}"
                th:text="${test.testCode}+' : '+${test.testName}"></option>
    </select>
</div>

Мой результат

Изображение - tymeleaf выпадающее меню

Ответ 3

Вам нужен только этот код на ваш взгляд.

List<Test> tests = testRepository.findAll();
model.addAttribute("tests", tests);

Ответ 4

Для генерации выпадающего списка String, возвращаемого в модель, вам просто нужно использовать эти строки. Вам не нужно создавать какой-либо класс модели с дополнительными методами получения и установки. Ваш код верен, вы просто пропустили имя переменной для хранения значения, возвращенного в списке countryName в th: each.

<select th:field="*{countryName}">
<option value="">Select Country</option>
<option th:each="country : ${countryName}" th:value="${country}" th:text="${country}"></option>
</select>