Вот так я решил проблему. Вместо того чтобы иметь список форм обратной связи для хранения данных, специфичных для каждой итерации, мне пришлось создать одну форму обратной связи со списком Feedback
объектов домена.
Мой FeedbackForm
выглядит сейчас так:
public class FeedbackForm {
private List<Feedback> feedbacks;
...
getters and setters
}
И, как правило, класс Feedback
будет выглядеть так:
public class Feedback {
private String feedback;
private int rating;
...
getters and setters
}
Теперь мой JSP выглядит так:
<portlet:actionURL var="saveURL">
<portlet:param name="action" value="save" />
<portlet:param name="index" value="${stat.index}" />
</portlet:actionURL>
<c:forEach var="employee" items="${employees}" varStatus="stat">
<form:form action="${saveURL}" method="post" modelAttribute="feedbackForm">
<form:input path="feedbacks[${stat.index}].feedback" />
<form:input path="feedbacks[${stat.index}].rating" />
<input type="submit" value="Submit Feedback"/>
</form:form>
</c:forEach>
И, наконец, мой метод контроллера выглядит так:
@RequestMapping(params = "action=save")
public void saveFeedback(ActionRequest request, ActionResponse response,
@RequestParam("index") int index,
@ModelAttribute("feedbackForm") FeedbackForm feedbackForm, Model model)
throws PortletException {
Feedback feedback = feedbackForm.getFeedbacks().get(index);
logger.debug("Submitted feedback is {}", feedback);
}
Идея состоит в том, что невозможно одновременно отправлять несколько форм, хотя они могут появляться на странице одновременно. По сути, на форму можно нажать только одну кнопку отправки.
Надеюсь, это поможет кому-то в подобной ситуации.