2015-12-09 3 views
1

Я пытаюсь обрабатывать динамическую форму пружины. Дело в том, что до времени выполнения я точно не знаю, сколько форм ввода имеет. Я не знаю названия входов или любой информации, которую можно использовать с @RequestParam.Обработка динамической формы

Вот мои контроллеры:

@RequestMapping(value = "/surveys/{id}", method = RequestMethod.GET) 
public String survey(@PathVariable int id, ModelMap model) { 
    model.addAttribute("surveyForm", getQAForm(id)); 
    return "user/survey"; 
} 

@RequestMapping(value = "/submitSurvey", method = RequestMethod.POST) 
public String submitSurvey(@ModelAttribute("surveyForm") QAForm qaForm, ModelMap modelMap){ 
    Set<Answer> answers = qaForm.getAnswers(); 
    modelMap.addAttribute("answers", answers); 
    return "test"; 
} 

И JSP-:

 <f:form method="post" modelAttribute="surveyForm" action="/submitSurvey">> 
     <h2>${surveyForm.survey.title}</h2> 
     <h5>${surveyForm.survey.description}</h5> 
     <c:forEach items="${surveyForm.answers}" var="answer"> 
      <div class="panel panel-default"> 
      <div class="panel-heading"> 
       ${answer.question.text} 
      </div> 
      <div class="panel-body"> 
       <f:input path="${answer.answerText}" type="text" /> 
      </div> 
      </div> 
     </c:forEach> 
     <input class="btn btn-default" type="submit" value="Submit"/> 
     <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> 
     </f:form> 

После обработки/submitSurvey запросить его простой редирект test.jsp без какой-либо информации из формы. Если есть какой-то способ справиться с этим другим способом, я буду благодарен за то, что я в правильном направлении.

+0

В чем ваш вопрос? –

+0

@AlanHay Как получить результат из этой формы. – irisk

ответ

1

Неясно именно то, что вы просите, однако если это связано с привязкой коллекции, в которой вам необходимо внести следующие изменения.

  1. Ответы должны храниться в списке, а не в наборе. т. е. qaForm.getAnswers() должен возвращать список, поскольку Spring может привязываться только к коллекции, доступной по индексу.

  2. Изменение JSP разметки использовать индексированные свойства следующим образом:

.

<c:forEach items="${surveyForm.answers}" var="answer" varStatus="status"> 
     <div class="panel panel-default"> 
      <div class="panel-heading"> 
       ${answer.question.text} 
      </div> 
      <div class="panel-body"> 
       <f:input path="answer[${status.index}].answerText" type="text" /> 
      </div> 
     </div> 
</c:forEach> 

Чтобы заполнить существующий обследование представить внести изменения ниже (по http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-method-args)

  1. Добавить скрытое поле в форме, которая представляет surveyId.

  2. Добавьте способ к вашему контроллеру, как показано ниже, который загрузит указанное исследование и привяжет переданные данные к этому существующему экземпляру.

.

@ModelAttribute("surveyForm") 
public SurveyForm getSurveyForm(@RequestParam(required = false) Integer surveyId){ 
    if(id != null){ 
     //load the form required by id 
    } 
} 
+0

Спасибо, теперь у меня есть еще одна проблема, когда я верну свой объект surveyForm, объект ответа не содержит поля Question, User, доступно только answerText. Это нормальное поведение? И как получить этот объект из моего jsp? – irisk

+0

Необходимо заполнить существующий опрос. Весна будет создавать новую. См. Обновление. –

+0

Получил ошибку состояния 400 сейчас, – irisk

0

Вы можете сделать Somthing так:

@RequestMapping(value = "/surveys/{id}", method = RequestMethod.GET) 
    public String survey(@PathVariable int id, ModelMap model,@RequestParam("description") String desc) { 
    // here you can handl the param description 
    model.addAttribute("surveyForm", getQAForm(id)); 
    return "user/survey"; 
} 

Но вы должны иметь это из параметров в вашей форме в вашей странице JSP, как:

<f:form method="post" modelAttribute="surveyForm" action="/submitSurvey">> 
<input type="text" name="description" /> 
.... 
Смежные вопросы