#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 привязывает его к полю хранилища объектов модели.