Во-первых, у тега form нет атрибута modelAttribute.
Во-вторых, у вас в результате работы цикла будет куча форм с одинаковым именем, что делает html невалидным.
В-третьих, отправлена за один раз может быть только одна форма. Соответственно, контролер получит только один экземпляр полей name, phone и email, не из чего будет делать List.
Лучше сделать так:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
<form:form modelAttribute="formData" method="post">
<c:forEach items="${formData.sprints}" var="sprint" varStatus="status">
<input type="text" name="sprints[${status.index}]['name']" placeholder="Name"></td><br>
<input type="text" name="sprints[${status.index}]['phone']" placeholder="Phone"><br>
<input type="text" name="sprints[${status.index}]['email']" placeholder="E-Mail"><br>
</c:forEach>
<input type="submit" value="Сохранить">
</form:form>
public class SprintsForm {
private List<Map<String, String>> sprints;
public List<Map<String, String>> getSprints() {
return sprints;
}
public void setSprints(List<Map<String, String>> sprints) {
this.sprints = sprints;
}
}
@Controller
@RequestMapping("/")
public class FormController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView showForm() {
SprintsForm formData = new SprintsForm();
return new ModelAndView("form" , "formData", formData);
}
@RequestMapping(method = RequestMethod.POST)
public ModelAndView handleForm(@ModelAttribute SprintsForm formData, BindingResult result) {
if (result.hasErrors())
return new ModelAndView("form", "formData", formData);
...
}
}