Spring MVC: динамически добавляемые флажки не отправляются

#java #forms #spring-mvc

#java #формы #spring-mvc

Вопрос:

У меня есть форма, которая динамически генерирует флажки на основе выбора пользователя в другой части формы. Эти флажки появляются на экране и ведут себя нормально, но при отправке формы они никогда не включаются в запрос. По сути, он ведет себя так, как будто элементы флажка не привязаны к объекту модели.

Вот вспомогательный объект. Поле, к которому должны привязываться флажки, — это «магазины»:

 public class GameplanGrouping {
private int id;
private Dba dba;
private String name;
private Set<String> stores = new LinkedHashSet<String>();
//Getters and Setters
}
  

Вот как выглядят соответствующие части формы после ее создания:

 <form id="createCategory" action="/gameplan/newGrouping" method="post" enctype="multipart/form-data"/>
...
<td>
  <input type="checkbox" id="store_0" name="stores" value="13950" class="storeCheckBox"/>13950
</td>
  

И вот контроллер:

  @RequestMapping(value={"/newGrouping"}, method = RequestMethod.POST)
 public String submitAddGrouping(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes, @Valid @ModelAttribute("gameplanGrouping") GameplanGrouping grouping){
   gpDao.insertGameplanGrouping(grouping);
        redirectAttributes.addFlashAttribute("message",
                "Successfully added new grouping '"   grouping.getName()   "' for division "   grouping.getDba().getName()   ".");
          return "redirect:/groupings?division="   grouping.getDba().getName();
      }
  

Все остальные привязки (например, к ‘name’ и ‘dba’) работают нормально, но набор хранилищ никогда не заполняется.

Странно то, что, если я скопирую один из сгенерированных флажков и вставлю его вручную в HTML, он правильно связывает и сообщает значения. Например, если я добавлю:

 <input type="checkbox" id="store_dummy" name="stores" value="DUMMY" class="storeCheckBox"/>
DUMMY</td>
  

в таблицу перед ячейкой, заполненной сгенерированными результатами, и выберите ее, затем «ФИКТИВНЫЙ» отображается как одно из значений «stores» в объекте поддержки при отправке. Почему это связано в одном случае, но не в случае динамически генерируемого элемента?

Обновить

Как было предложено в комментариях, я переключил набор в список, потому что Spring не будет привязываться к набору, но это тоже не помогло. Поведение было идентичным.

Однако я с интересом отмечаю, что версия Spring MVC, упакованная как часть Spring Boot 1.3.6, по-видимому, может привязываться к наборам, как показано ниже:введите описание изображения здесь

Однако, как упоминалось выше, я могу привязать это только тогда, когда я кодирую элементы флажка вручную. Он ни при каких обстоятельствах не связывается с разметкой, сгенерированной jQuery.

Комментарии:

1. Очевидный вопрос: они действительно выбраны?

2. @Alan Hay Да, это так.

3. Вы не можете привязать набор только к карте, списку или массиву. Попробуйте изменить список <String> хранилищ. Смотрите также mkyong.com/spring-mvc /…

4. Спасибо за предложение. Я только что попробовал это, но он по-прежнему не привязывается. Кроме того, в новейшей версии Spring может быть что-то другое, потому что она привязывалась к полю Set<String>, когда я использовал нединамически сгенерированный элемент. Я упоминал об этой особенности в последнем абзаце.

5. Вы говорите, что «тогда «DUMMY» отображается как одно из значений «stores» в HttpServletRequest», что не совпадает с тем, что впоследствии Spring привязывает его к полю хранилища объектов модели.