【问题标题】:Spring MVC: processing values from timesheet - multiple objectsSpring MVC:处理时间表中的值 - 多个对象
【发布时间】:2011-03-23 09:44:23
【问题描述】:

我正在开发一个时间表/actiontracker 应用程序。我正在使用 Spring MVC。这是我目前的情况:

我得到了一个包含所有任务的表格。在这些任务旁边有七个文本框(显示接下来 7 天的小时数)。用户必须能够保存任务(和小时数)。我不确定如何将这些结果发送到控制器。它包含一个对象列表。 比方说……

TaskID - Taskname - D1 - D2 - D3 ...
1        Hello      5    3    2
2        Bai        4    2    1
3        I'm back   3    4    3

它应该发回一个任务对象列表,所以我可以插入/更新/删除一个时间记录。

任何想法如何做到这一点?

【问题讨论】:

    标签: java spring jsp spring-mvc controller


    【解决方案1】:

    这对我有用,希望对你有帮助!

    控制器

    @Controller
    public class ExampleController {
    
        private Timesheet timesheet;
    
        public ExampleController() {
            List<Task> tasks = new ArrayList<Task>();
            tasks.add(new Task(1, "Hello", 0, 0, 0, 0, 0, 0, 0));
            tasks.add(new Task(2, "Bai", 0, 0, 0, 0, 0, 0, 0));
            tasks.add(new Task(3, "I'm back", 0, 0, 0, 0, 0, 0, 0));
            this.timesheet = new Timesheet(tasks);
        }
    
        @RequestMapping(value = "/timesheet.do", method = RequestMethod.GET)
        public ModelAndView displayTimeSheet() {
            return new ModelAndView("timesheet", "timesheet", timesheet);
        }
    
        @RequestMapping(value = "/timesheet.do", method = RequestMethod.POST)
        public ModelAndView updateTimeSheet(@ModelAttribute("timesheet") Timesheet timesheet) {
            this.timesheet = timesheet;
            return new ModelAndView("timesheet", "timesheet", timesheet);
        }
    
    }
    

    JSP 页面

    <form:form commandName="timesheet">
      <table>
        <tr>
          <th>TaskID</th>
          <th>Taskname</th>
          <th>D1</th>
          <th>D2</th>
          <th>D3</th>
          <th>D4</th>
          <th>D5</th>
          <th>D6</th>
          <th>D7</th>
        </tr>
        <c:forEach items="${timesheet.tasks}" var="task" varStatus="tasksRow">
          <tr>
            <td>
              <form:hidden path="tasks[${tasksRow.index}].id"/>
              <c:out value="${timesheet.tasks[tasksRow.index].id}"/>
            </td>
            <td>
              <form:hidden path="tasks[${tasksRow.index}].name"/>
              <c:out value="${timesheet.tasks[tasksRow.index].name}"/>
            </td>
            <td>
              <form:input path="tasks[${tasksRow.index}].day1hours"/>
            </td>
            <td>
              <form:input path="tasks[${tasksRow.index}].day2hours"/>
            </td>
            <td>
              <form:input path="tasks[${tasksRow.index}].day3hours"/>
            </td>
            <td>
              <form:input path="tasks[${tasksRow.index}].day4hours"/>
            </td>
            <td>
              <form:input path="tasks[${tasksRow.index}].day5hours"/>
            </td>
            <td>
              <form:input path="tasks[${tasksRow.index}].day6hours"/>
            </td>
            <td>
              <form:input path="tasks[${tasksRow.index}].day7hours"/>
            </td>
          </tr>
        </c:forEach>
      </table>
      <input type="submit"/>
    </form:form>
    

    模型类

    public class Timesheet {
    
        private List<Task> tasks;
    
    public class Task {
    
        private int    id;
        private String name;
        private int    day1hours;
        private int    day2hours;
        private int    day3hours;
        private int    day4hours;
        private int    day5hours;
        private int    day6hours;
        private int    day7hours;
    

    您可以在此处下载整个示例项目:

    http://www.bitsandbytecode.com/ftp/spring-mvc-multi-record-form.zip

    【讨论】:

    • 非常感谢。它工作正常。我的控制器现在出现了一些问题,但主要问题得到了解决。如果我真的收到信息,“检查”的最佳方式是什么?我将不得不遍历时间表/任务列表。有什么建议吗?非常感谢您的努力。欣赏它。
    • 我得到的错误顺便说一句:[23/03/11 15:06:02:099 CET] 00000026 WebApp E [Servlet Error]-[actiontracker]: org.springframework.beans.NullValueInNestedPathException: Invalid bean 类 [be.pv.actiontracker.domain.TaskList] 的属性“任务 [0]”:无法访问索引属性路径“任务 [0]”中引用的属性的索引值:返回 null
    • 我在上面添加了整个项目的链接,以便您可以下载它以查看是否与您正在做的不同。当我自己尝试这个时,我没有在控制器中遇到任何问题。至于您收到的错误,似乎任务集合为空,或者索引为 0 的元素为空。
    • 如果您使用 Spring 的 org.springframework.util.AutoPopulatingList 而不是 ArrayList,则无需担心自己为列表创建任务对象来处理发布的表单。
    • 不错的 GriffeyDog,我以前从未使用过 AutoPopulatingList。我在这里找到了一个很好的解释:blog.richardadamdean.com/?p=12.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2012-10-23
    • 2015-02-20
    • 1970-01-01
    • 2013-10-15
    • 2015-07-31
    相关资源
    最近更新 更多