У меня есть страница списка покупок, на которой отображается список продуктов, сгруппированных по категориям, и позволяет пользователю указать количество каждого продукта. Есть кнопка отправки, которая отправляет форму на серверную часть. Товары на странице должны отображаться по категориям.
Таким образом, я передаю технологии просмотра (Thymeleaf) Map, и у меня есть метод контроллера, который принимает запрос POST с заполненной формой.
Код
Это класс модели:
Код: Выделить всё
public class Product{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Product() {}
public Product(String name) {
this.name = name;
}
}
Код: Выделить всё
public class ListForm {
private Map list;
public ListForm() {
list = new HashMap();
}
public void setList(Map list) {
this.list = list;
}
public Map getList() {
return this.list;
}
}
Код: Выделить всё
@ModelAttribute("fullList")
public ListForm fullList() {
// populate the ListForm with values
{
@RequestMapping("/")
public String home(@ModelAttribute("fullList") ListForm fullList) {
return "index";
}
@PostMapping("/update")
public String update(@ModelAttribute ListForm form) {
// process the submitted form
return "index";
}
Код: Выделить всё
После того, как пользователь заполнил форму и отправил ее, я получаю:
Код: Выделить всё
Request processing failed: org.springframework.beans.NullValueInNestedPathException: Invalid property 'list[FRUITS][0]' of bean class [spring.mvc.ListForm]: Cannot access indexed value of property referenced in indexed property path 'list[FRUITS][0]': returned null
Исследуйте
Если я переключу список с Map to Map (и вносим необходимые изменения), тогда все работает нормально - Spring MVC создает новую строку.
А еще, если я поменяю мой метод POST контроллера будет таким:
Код: Выделить всё
@PostMapping("/update")
public String update(@ModelAttribute("fullList") ListForm form) {
// process the submitted form
return "index";
}
Как мне решить эту проблему? Нужно ли мне регистрировать собственный DataBinder или что-то в этом роде?
Подробнее здесь: https://stackoverflow.com/questions/793 ... spring-mvc
Мобильная версия