Вообщем получилось сделать следующим образом. На страницу в контроллере добавляю атрибуты со списков всех отделов и всех услуг. В скрипте, вытаскиваю id отдела и затем по списку услуг сравниваю поле id_Отдела услуги с ранее выбранным id. Если совпадает, то добавляю его в select.
Сложность была, в том, что я не знаю JS и плохо знаю возможности thymeleaf.
Всем спасибо за помощь!
html код
<div class="col-sm-6">
<label for="inputService" class="form-label">Выбранная структурное подразделение</label>
<select class="form-select" name="inputDepartment" id="inputDepartment" required oninput="testFunction()">
<option selected disabled value="">Выберите структурное подразделение</option>
<option th:each="el : ${allDepartments}" th:value="${el.id}" th:text="${el.name}"></option>
</select>
</div>
<div class="col-sm-6">
<label for="inputService" class="form-label">Выбранная услуга</label>
<select class="form-select" name="inputService" id="inputService" required disabled>
<option selected disabled value="">Выберите услугу</option>
<option></option>
</select>
Сам скрипт
< script th: inline = "javascript" > function testFunction() {
document.getElementById("inputService").removeAttribute("disabled");
/*<![CDATA[*/
var departments = [];
var size = 1 + /*[[${arrayListDepartments.get(arrayListDepartments.size()-1).getId()}]]*/ ;
for (var i = 0; i < size; i++) {
departments.push("0");
}
/*[# th:each="elVar : ${arrayListDepartments}"]*/
var index = /*[[${elVar.id}]]*/ ;
departments[index] = /*[[${elVar.name}]]*/
/*[/]*/
/*]]>*/
var x = document.getElementById("inputDepartment").value;
var service = [];
/*[# th:each="elServ : ${allServices}"]*/
var index_S = /*[[${elServ.department.id}]]*/
if (x == index_S) {
var var_arr = [];
var_arr.push( /*[[${elServ.serviceName}]]*/ , /*[[${elServ.id}]]*/ );
service.push(var_arr);
}
/*[/]*/
inputService.options.length = 1;
for (var i = 0; i < service.length; i++) {
let newOption = new Option(service[i][0], service[i][1], );
inputService.append(newOption);
}
} < /script>