I need to populate a drop down with all the values within a list of strings.
Controller Class
@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"; }
I didn't know where to start for the HTML so I started with this
<select th:field="*{countryName }"> <option value="default">Select a country</option> <option th:each="${countryName }" th:value="${countryName }"th:text="${countryName }"/> </select>
What should my html/controller look like to add all of the elements of the list as drop down options?
Thanks in advance!
Yes it is possible to do it in Thymeleaf since it's using Object-Graph Navigation Language for evaluating expression values - content of ${...} block. You can access public methods normally on your model object so calling boolean List#add(E e) method works.
This is how I populate the drop down list.I think it may help to you get some idea about it.
Controller
List<Operator> operators = operatorService.getAllOperaors() model.addAttribute("operators", operators);
Model
@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 ... }
View
<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>
First thank to your question and answer! I've done with this solution.
My Model
@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; } }
My View
List<Test> test = new ArrayList<>(); model.addAttribute("test", test); List<Test> tests = testRepository.findAll(); model.addAttribute("tests", tests);
My 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>
My Result
Image - tymeleaf dropdown from model
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With