Я полностью меняю этот вопрос, так как на его часть был дан ответ здесь с большой помощью Авниш! Том направил меня в правильном направлении, так что спасибо, Том!
Моя проблема в том, что я не знаю, как сказать Thymeleaf предварительно выбирать элементы объекта при его редактировании.
Позволь мне показать тебе:
Это решение работает:
<select class="form-control" id="parts" name="parts" multiple="multiple">
<option th:each="part : ${partsAtribute}"
th:selected="${servisAttribute.parts.contains(part)}"
th:value="${part.id}"
th:text="${part.name}">Part name</option>
</select>
Я пробовал это:
<select class="form-control" th:field="*{parts}" multiple="multiple">
<option th:each="part : ${partsAtribute}"
th:field="*{parts}"
th:value="${part.id}"
th:text="${part.name}">Part name</option>
</select>
не сработало. Я также пробовал это:
<select class="form-control" th:field="*{{parts}}" multiple="multiple">
<option th:each="part : ${partsAtribute}"
th:field="*{parts}"
th:value="${part.id}"
th:text="${part.name}">Part name</option>
</select>
тоже не работал. Я попытался удалить th:field="*{parts}"
из тега опции, тот же результат.
Если я изменяю th:value
на ${part}
, он работает, но тогда он не отправляет обратно строку идентификаторов, например [2,4,5,6,...], а Part
экземпляров, таких как [Part@43b45j, Part@we43y7,... ]...
ОБНОВЛЕНИЕ: я только что заметил, что это работает, если выбрана только одна часть:
<select class="form-control" th:field="*{parts}" multiple="multiple">
<option th:each="part : ${partsAtribute}"
th:field="*{parts}"
th:value="${part.id}"
th:text="${part.name}">Part name</option>
</select>
Если выбрано несколько частей, это не работает...