Привяжите Map> в Spring MVCJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Привяжите Map> в Spring MVC

Сообщение Anonymous »

Подготавливаем почву
У меня есть страница списка покупок, на которой отображается список продуктов, сгруппированных по категориям, и позволяет пользователю указать количество каждого продукта. Есть кнопка отправки, которая отправляет форму на серверную часть. Товары на странице должны отображаться по категориям.
Таким образом, я передаю технологии просмотра (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";
}
А это шаблон Thymeleaf: Проблема
После того, как пользователь заполнил форму и отправил ее, я получаю:

Код: Выделить всё

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
Похоже, что наличие пустого списка в записи карты вызывает проблему. Spring MVC не создает автоматически новый продукт и не добавляет его в список.
Исследуйте
Если я переключу список с Map to Map (и вносим необходимые изменения), тогда все работает нормально - Spring MVC создает новую строку.
А еще, если я поменяю мой метод POST контроллера будет таким:

Код: Выделить всё

    @PostMapping("/update")
public String update(@ModelAttribute("fullList") ListForm form) {
// process the submitted form
return "index";
}
Это работает, поскольку @ModelAttribute ссылается на ListForm, созданный методом @ModelAttribute. Но это не то, что мне нужно - мне нужна форма, которую заполнил пользователь.
Как мне решить эту проблему? Нужно ли мне регистрировать собственный DataBinder или что-то в этом роде?

Подробнее здесь: https://stackoverflow.com/questions/793 ... spring-mvc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»