Olegatorapp
@Olegatorapp
Java/Android dev

Как преобразовать html в Map или массив?

Есть post jsp, внутри которой генерируется указанное кол-во форм
<c:forEach var="inputLine" begin="1" end="${countSprints}">
                    <form action="sprints"  modelAttribute="sprintForm" name="first" method="post">
                        <input name="name"  type="text" placeholder="Name"></td><br>
                        <input name="phone" type="text" placeholder="Phone"><br>
                        <input name="email" type="text" placeholder="E-Mail"><br>
                    </form>
                </c:forEach></tr>


Мне надо преобразовать это, например, в List>, что бы был лист с мапами этих значений
Как это преобразовать при помощи Spring?

Я искал на форумах - ничего не нашёл пока
Пытался так и пытался через @RequestParam
@RequestMapping(value = "/create-form", method = RequestMethod.POST)
  public ModelAndView createProject(
      @ModelAttribute("sprintForm") ModelAndView contactForm,
      Model model) {
    ModelAndView m = new ModelAndView("show_project", "contactForm",
        contactForm);

    return m;
  }
  • Вопрос задан
  • 264 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Во-первых, у тега 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);
        
        ...
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы