Для реализации функционала выбора значения из выпадающего списка и обновления других полей формы без перезагрузки страницы, вы можете использовать JavaScript вместе с AJAX-запросами. Это позволит вам отправить выбранное значение на сервер и получить необходимые данные без полной перезагрузки страницы.
Вот основные шаги для достижения этой цели:
### 1. Измените HTML-код
Вам нужно обновить HTML-код для выпадающего списка и добавить обработчик событий на изменение (`change`):
```html
<div class="form-group">
<label for="projectName">Проект</label>
<select class="form-control" id="projectName" required>
<option hidden value="">Проект</option>
<option th:each="projectName : ${projectName}" th:text="${projectName}" th:value="${projectName}"></option>
</select>
</div>
<!-- Здесь могут быть другие поля для отображения данных -->
<div id="additionalFields">
<!-- Здесь будут отображаться дополнительные поля -->
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#projectName').change(function() {
var projectName = $(this).val();
$.ajax({
url: '/taskadd/getDetails', // изменить на ваш URL
type: 'GET',
data: { projectName: projectName },
success: function(data) {
// Обновляем остальные поля формы с полученными данными
$('#additionalFields').html(data);
},
error: function(xhr, status, error) {
console.error(error);
}
});
});
});
</script>
```
### 2. Создайте новый метод в контроллере
Вам нужно создать новый метод в `TasksController`, который будет обрабатывать AJAX-запросы и возвращать нужные данные (например, часть HTML-кода для обновления других полей).
```java
@RequestMapping(value = "/getDetails", method = RequestMethod.GET)
@ResponseBody
public String getDetails(@RequestParam String projectName) {
// Выполните вашу логику поиска данных на основе projectName
List<SomeDataType> details = someService.getDetailsByProjectName(projectName);
// Создайте HTML-код для отображения
StringBuilder sb = new StringBuilder();
for (SomeDataType detail : details) {
sb.append("<div>");
sb.append("<label>").append(detail.getFieldLabel()).append("</label>");
sb.append("<input type='text' value='").append(detail.getFieldValue()).append("'/>");
sb.append("</div>");
}
return sb.toString();
}
```
### 3. Настройте серверную часть
Убедитесь, что ваш метод `someService.getDetailsByProjectName(projectName)` правильно получает данные из базы данных, основанные на выбранном проекте.
### 4. Обновите представление
В методе `getDetails` вы возвращаете HTML-код для обновления части страницы. Вы можете использовать любой подход, включая шаблоны JSP или Thymeleaf, чтобы генерировать необходимый HTML.
### 5. Тестирование
Не забудьте протестировать обновленный функционал, чтобы убедиться, что данные загружаются и отображаются корректно без перезагрузки страницы.
Таким образом, с помощью JavaScript и AJAX вы сможете динамически загружать данные на форму в зависимости от выбора пользователя, не прибегая к перезагрузке страницы.