Форма, в которую я передал Collection of Booleans (то есть), изменяется флажком для каждого элемента.Когда атрибут (коллекция) отправляется в контроллер, возвращается значение NULL.
Коллекция называется isSubstituted, и я использую другой список под названием items, в котором я печатаю название заменяемых или отсутствующих в форме элементов.
Код контроллера:
@RequestMapping(value = "/edit", method = RequestMethod.POST, params = "save")
public ModelAndView save(@Valid final Revision revision, @RequestParam Collection<Boolean> isSubstituted, final BindingResult binding) {
ModelAndView result = new ModelAndView();
Revision saved;
Collection<Boolean> res = isSubstituted;
if (binding.hasErrors())
result = this.createEditModelAndView(revision);
else
try {
saved = this.revisionService.save(revision);
Collection<Revision> revisions = this.revisionService.getRevisionsByVehicle(saved.getVehicle().getId());
result.addObject("revisions",revisions);
result = new ModelAndView("redirect:/revision/garage/listByVehicle?varId=" + saved.getVehicle().getId());
} catch (final Throwable oops) {
result = this.createEditModelAndView(revision, "commit.error");
}
return result;
}
И другой метод:
protected ModelAndView createEditModelAndView(final Revision revision, final String messageCode) {
ModelAndView result;
Vehicle vehicle = revision.getVehicle();
Collection<String> items = new ArrayList<>();
Configuration c = this.configurationService.findAll().iterator().next();
Collection<Boolean> isSubstituted = revision.getIsSubstituted();
if(revision.getVehicle().getType().equals(VehicleType.motorbike))
items = c.getItemsForMoto();
else
items = c.getItemsForCar();
result = new ModelAndView("revision/edit");
result.addObject("vehicle", vehicle);
result.addObject("revision", revision);
result.addObject("items", items);
result.addObject("isSubstituted", isSubstituted);
result.addObject("message", messageCode);
result.addObject("requestURI", "/revision/garage/edit");
return result;
}
Код представления:
<jstl:forEach var="item" items="${items}" varStatus="count">
<p><jstl:out value="${item}"/>:</p>
<p>
<label/>
<input path="${isSubstituted[count.index]}" name="${item}" type="checkbox"/>
<span><jstl:out value="Substituted"/></span>
</label>
</p>
</jstl:forEach>
Фактические результаты таковы, что атрибут (список называется isSubstituted) прийти как ноль.