Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I populate a drop down with a list using thymeleaf and spring

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!

like image 235
Roman Paolucci Avatar asked Jun 09 '16 00:06

Roman Paolucci


People also ask

How do I add a value to a list in Thymeleaf?

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.


2 Answers

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> 
like image 78
Hasitha Diluka Avatar answered Sep 22 '22 18:09

Hasitha Diluka


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

like image 25
Thanongsak Chamung Avatar answered Sep 23 '22 18:09

Thanongsak Chamung