Как заполнить элемент select в springboot тимелеафа?

Я пишу веб-приложение с использованием тимелеафа, springboot. У меня есть один модельный класс с полями id, name, address, state и District. У меня есть 3 таблицы: таблица пользователей, таблица состояний с идентификатором, state_name, state_code и таблица районов с идентификатором, District_code, District_name, state_code.

Как отобразить список состояний в поле состояния пользовательской таблицы ?.

Q1. Когда я загружаю свое новое представление записи, оно должно собирать все записи из таблицы состояний и заполнять их в элементе select ?.

Q2. Когда я выбираю состояние из select fatch all dstrict list of that state ?.

Q3. Когда я открываю ту же запись в режиме редактирования, штат и список районов показывают значение по умолчанию ?.

Контроллер

@RequestMapping("user/new")
public String newUser(Model model){
    model.addAttribute("user", new User());
    return "userform";
}

@RequestMapping("user/edit/{id}")
public String update(@PathVariable Integer id, Model model){
    model.addAttribute("user", userService.getProductById(id));
    return "userform";
}

Модель

@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private String address;
private String state;
private String dist;
//getter setter
}

public class State {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer state_id;
private String state_name;
private String state_code;
}

Вид тимелиста

<html xmlns:th="http://www.thymeleaf.org">
<head lang="en"> 
</head>
<body>
  <div class="container">
  <h2>User Details</h2>
<div>
    <form class="form-horizontal" th:object="${user}" th:action="@{/user}" method="post">
        <input type="hidden" th:field="*{id}"/>            
        <div class="form-group">
            <label class="col-sm-2 control-label">Name:</label>
            <div class="col-sm-10">
             <input type="text" class="form-control" th:field="*{name}"/>
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">Address:</label>
            <div class="col-sm-10">
            <input type="text" class="form-control" th:field="*{address}"/>
            </div>
        </div>
**//NOTE:- These select list not working I am able to display above information not this list**
        *<div class="form-group">
            <label class="col-sm-2 control-label">State:</label>
            <div class="col-sm-10">
              <select class="form-control" name="selectState" th:field="*{state}" >
            <option th:each="sopt:${state}" th:value="?" th:text="?">State</option>
             </select>
            </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">Dist:</label>
            <div class="col-sm-10">
              <select class="form-control" name="selectDistrict" th:field="*{dist}" >
            <option th:each="sopt:${dist}" th:value="?" th:text="?">Dist</option>
             </select>
            </div>
        </div>*
        <div class="row">
            <button type="submit" class="btn btn-default">Submit</button>
        </div>
    </form>
</div>
</div> 
</body>
</html>

person Pawan Kumar    schedule 28.12.2015    source источник


Ответы (1)


В первом квартале я получил решение, используя Что такое @ModelAttribute в Spring MVC?

@ModelAttribute("states")
public List<State> populateStates() {
    List<State> listStates = new ArrayList<State>();
    for (State e : stateService.listAllState()) {
        System.out.println(e.getState_code());
        listStates.add(e);
    }
    return listStates;
}

Проблема Q3 также решена этим, когда вы откроете его в режиме редактирования, он выберет ваше сохраненное значение

<select th:field="*{states}" id="state" onChange="onstatechange(this)" class="infobox">
    <option value="0">Select Your State</option>
    <option th:each="state : ${states}" th:value="${state.state_id}" th:text="${state.state_name}"></option>
</select>

Для Q2 вы можете использовать вызов ajax или javascript onChange, чтобы решить мою проблему.

person Pawan Kumar    schedule 05.01.2016