【问题标题】:Series of repeated forms in Spring Portlet MVCSpring Portlet MVC中的一系列重复表单
【发布时间】:2012-01-09 15:54:05
【问题描述】:

我有一个相当简单的用例。参与者是向员工列表提供反馈的经理。

视图显示员工列表。经理(用户)可以单击打开反馈表单(内联)的每个员工以获取反馈。

我有一个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)

很遗憾,我无法继续进行此操作,因为我觉得我在这里遗漏了一些重要的设计作品。

我应该如何构建我的 &lt;form:form&gt;saveFeedback 方法以实现我想要做的事情?

【问题讨论】:

    标签: java spring spring-mvc portlet


    【解决方案1】:

    这就是我解决问题的方法。我不得不创建一个包含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);
    }
    

    这个想法是不可能同时提交多个表单,尽管它们可能同时出现在页面上。基本上,每个表单只能点击一个提交按钮。

    希望这对处于类似情况的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 2012-08-12
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多