Здравствуйте, дорогие пользователи stackoverflow, пожалуйста, помогите мне решить следующую проблему: я понятия не имею как передать данные из представления тимелист в контроллер, которые ожидают данные в виде карты ha sh? Итак, позвольте мне объясним более подробно.
У меня есть следующее pojo, которое используется в качестве оболочки для моих данных hashMap. Выглядит это так:
public class DTDays {
private Map<Driver, String> driversDays = new HashMap<>();
public Map<Driver, String> getDriversDays() {
return driversDays;
}
public void setDriversDays(Map<Driver, String> driversDays) {
this.driversDays = driversDays;
}
}
Контроллер имеет метод с атрибутом модели параметров и еще одно pojo:
@RequestMapping(value = "/go", method = RequestMethod.POST)
public String advanced(@ModelAttribute DTDays dtDays,
@RequestParam(name = "tourId") Long tourId, Model model){
// make some bussiness logic with provided data
return "redirect:/tours/advanced";
}
здесь я debbuged и dtDays не ноль, но свойство карты также пусто TourId работает, как и ожидалось, я могу получить правильное значение. Теперь к проблеме, вид:
<body>
<div style="margin-left: 20px;">
<h1 th:text="${tour.tittle}"></h1>
<p>Add tour interval for drivers</p>
<form id="driverIntervals" th:action="@{/advanced/go}" th:object="${driversDays}" method="post">
<table>
<tr>
<td>Drivers:</td>
<td>Date:</td>
</tr>
<tr th:each="d: ${attachedDrivers}">
<td th:text="${d.id+' '+d.fullName}" >
<input type="hidden" th:value="${d.id}" >
</td>
<td>
<input type="text" placeholder="Pick days" th:name="days"/>
</td>
</tr>
</table>
<input type="hidden" th:name="tourId" th:value="${tour.id}"/>
<button type="submit">Confirm</button>
</form>
</div>
</body>
Вид выглядит следующим образом:
Что я должен написать для представления данных? В моем случае драйвер - это ключ карты, а введенные пользователем данные в соответствующем поле ввода будут значением карты
Я уже знаю, как отправить Список, используя опцию select в представлении. :
<select th:name="drivers2attach" multiple="multiple" id="attachDrivers">
<!--/*@thymesVar id="drivers" type="java.util.List<stanislav.tun.novinomad.picasso.persistance.pojos.Driver>"*/-->
<option th:each="d : ${drivers}" th:value="${d.id}"
th:text="${d.getId()+' '+d.fullName}">
</option>
</select>
и список списков @RequestParam в контроллере:
@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView addTourAction(@ModelAttribute("tour") Tour tour,
@RequestParam(required = false, name = "drivers2attach") List<Long> drivers2attach)
Но как обращаться с картой?
В случае со списком данные заполняются автоматически. В карте предварительно заполнены только ключи, это количество драйверов, и теперь я ожидаю, что пользовательский ввод для каждого драйвера будет иметь значение ключа.
При изучении ответов я уже читал следующие источники: Как связать список объектов с тимелистом?
Отправить объект списка из тимелиста в контроллер
Как загрузить значения объектов HashMap и ModelandView с помощью Thymeleaf в приложении Spring Boot?
Привязка формы карты Thymeleaf
http://forum.thymeleaf.org/How-to-use-Map-lt-String-String-gt-with-Spring-and-Thymeleaf-forms-td4028666.html
http://forum.thymeleaf.org/How-to-use-method-POST-with-a-complex-Hashmap-lt-Object-list-lt-Object-gt-gt-td4031257.html
Переплет формы карты тимелина
Используйте HashMap в качестве бобовой пружины формы MVC + ThymeLeaf et c.
Но не помогло. Где-то в этих ссылках я узнал, что я должен использовать какую-то обертку, чтобы сделать это, но опять же не знаю, почему это не работает, или что я должен сделать дополнительно, чтобы это работало. Может быть, я вообще неправильно пишу logi c и для передачи данных в виде hashmap сначала преобразую данные в список, а затем каким-то образом получу карту из него в контроллере?