Spring Portlet MVC中的一系列重复形式
问题内容:
我有一个相当简单的用例。演员是经理,负责向员工列表提供反馈。
该视图显示员工列表。经理(用户)可以单击每个员工,然后打开(内联)反馈表单以捕获反馈。
我有一个List<Employee>
用来构造页面上的员工列表的。我无法理解如何组织和获取反馈。我打算有一个单独的bean,Feedback
它对应于特定的反馈Employee
。
我从<form:form>
循环构建开始,然后执行以下操作:
<c:forEach var="employee" items="${employees}" varStatus="stat">
<form:form action="${saveURL}" method="post" modelAttribute="feedback-${stat.index + 1}">
<input type="submit" value="Submit Feedback"/>
</form:form>
</c:forEach>
我试图保持我的processAction
方法的签名,如下所示:
@RequestMapping(params = "action=save")
public void saveFeedback(ActionRequest request, ActionResponse response, @ModelAttribute("feedback") Feedback feedback, Model model)
不幸的是,我无法继续进行此操作,因为我感觉这里缺少一些重要的设计作品。
我应该如何构建我<form:form>
或saveFeedback
方法,以达到我所试图做的?
问题答案:
这就是我解决问题的方式。我没有一个用于保存每个迭代特定数据的反馈表单的列表,而是必须创建一个包含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);
}
这样的想法是不可能同时提交多个表单,尽管它们可能同时出现在页面上。基本上,每个表单只能单击一个提交按钮。
希望这对处于类似情况的人有所帮助。