Java JSP SpringMVC:无法使表格单元格可编辑

时间:2015-08-23 04:41:52

标签: javascript java jsp spring-mvc

目标

我有一个数据表(只是文本),在jsp页面加载时检索。我试图让当前包含文本的单元格变成一个文本框,如果单击该文本框,则将其包含在文本框中。有一个"更新"和"删除"每行末尾的按钮。更新将传递行当前具有的任何文本到控制器的更新方法(正常工作)。删除会将密钥(我指定为该密钥的那一行中的任何单元格)传递给控制器​​的删除方法(由于问题#2而无法工作)。我对控制器类,spring或JSP和JavaScript前端以外的任何问题都没有任何问题。

问题

(所有这些问题都将通过一个最新的示例项目来解决,该项目允许在 HTML表中使用裸地进行就地编辑,删除和插入表行-minimum JavaScript。我已经阅读了很多例子,这些例子要么创建100%JavaScript / jQuery / jTable / etc的表,要么使用HTML表,但没有我描述的基本功能。)

  1. 我无法弄清楚如何制作包含文字的单元格,将其转换为包含原始文本的输入文本框。我可以显示带有文本的单元格,也可以显示包含原始文本的文本框的单元格,但不能以交互方式显示。我尝试了不同的JS示例,这些示例都存在我无法解决的问题,主要是因为它们是出于其他目的而略有相似的目的。

  2. 我无法弄清楚如何制作两种不同的表单,并且它们各自的提交按钮对同一数据起作用。我有一个每行的表单,并在行的末尾有两个提交按钮,"更新"和"删除"。我只能让他们中的一个一次工作,因为我不知道如何将一个提交按钮与更新相关联,同时将另一个按钮,"删除",与执行删除操作。

  3. 正如您将在控制器代码中看到的,出于某种原因,我必须拥有 控制器中的model.addAttribute("row", myService.retrieveRecords().get(0));即使此调用:model.addAttribute("records", myService.retrieveRecords());已填充每一行。如果没有额外的代码,我就不会理解如何完成同样的事情。

  4. 我无法弄清楚如何在表格底部放置一行空文本框,可用于向表中添加新行。我尝试复制当前显示行的方式(作为文本框),只是空值,但是Java抱怨<td><form:input path="cell1" value="${row.cell1}"/></td>中的路径变量与我创建的新空行完全相同。

  5. 当前代码

    JSP

    <body>
    <div align="center">
        <table border="1" cellpadding="5">
            <caption><h2>TABLE</h2></caption>
            <tr>
                <th>CELL1</th>
                <th>CELL2</th>
                <th>CELL3</th>
                <th></th>
                <th></th>
            </tr>
            <c:forEach var="row" items="${records}">        
                <tr>
                    <form:form class="data-form" method="post" action="updateRow" modelAttribute="row">
                        <td><form:input path="cell1" value="${row.cell1}"/></td>
                        <td><form:input path="cell2" value="${row.cell2}"/></td>
                        <td><form:input path="cell3" value="${row.cell3}"/></td>
                        <td><input type="submit" value="UPDATE"/></td>
                        <td><input type="submit" value="DELETE"/></td>
                    </form:form>
                </tr>
            </c:forEach>
        </table>
    </div>
    </body>
    

    控制器

    // "C".R.U.D.
    @RequestMapping(value = "/addRow", method = RequestMethod.POST)
    public String handleCreateRecordRequest(@ModelAttribute("record") TodoListRecord record, Model model) {
        myService.createRecord(record);
        return HOME_PAGE_REDIRECT;
    }
    
    // C."R".U.D.
    @RequestMapping(value = "/home", method = RequestMethod.GET) // 
    public String handleRetrieveRecordsRequest(Model model) throws IOException {
        // This has to be in here or it complains that row is null, even though records populates row...     
        model.addAttribute("row", myService.retrieveRecords().get(0)); 
        model.addAttribute("records", myService.retrieveRecords());
        return HOME_PAGE;
    }
    
    // C.R."U".D.
    @RequestMapping(value = "/updateRow", method = RequestMethod.POST)
    public String handleUpdateRecordRequest(@ModelAttribute("row") TodoListRecord row, Model model) {
        myService.updateRecord(row);
        return HOME_PAGE_REDIRECT;
    }
    
    // C.R.U."D".
    @RequestMapping(value = "/deleteRow", method = RequestMethod.POST)
    public String handleDeleteRecordRequest(@ModelAttribute("key") String key, Model model) {
        myService.deleteRecord(key);
        return HOME_PAGE_REDIRECT;
    }
    

0 个答案:

没有答案