如何在不使用输入标记

时间:2017-04-11 05:21:21

标签: javascript spring jsp html-table

我正在处理当前的项目模块,即用户对Excel工作表进行修改,我仍然无法获得动态<td>值。

我的JSP:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page session="true"%>
<html>
<head>
<style type="text/css">
</style>
</head>
<body>
    <form action="save" method="post" id="exceldata">
        <table border="5" id="dataTable">
            <tbody>
                <c:forEach var="data" items="${Hello.userlist}" varStatus="loop">
                    <tr>
                        <c:forEach var="innerData" items="${data}">
                            <td id="innerData" contenteditable="true">
                            <c:out value="${innerData}"></c:out></td>
                          // ${innerData} will be updated by user
                           //here i need updated td ${innerData} data
                           //i have done all the possible R&D in 2days
                           // i can not use <input> under <td>
                        </c:forEach>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
        <input type="hidden" value="${sizeOfData}" name="sizeOfData">
        <input type="submit" value="save">
    </form>
</body>
</html>

我的控制器:

这里在我的控制器类和saveExcel中我需要更新的td值td

Excel_Data ed = new Excel_Data();

@RequestMapping("/")
public ModelAndView showExcel() {
    List ll = ed.readData(FILE_NAME);

    lb.setUserlist(ll);
    home.addObject("sizeOfData", ll.size());
    home.addObject("Hello", lb);
    return home;
}
@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView saveExcel(@ModelAttribute("userForm") ListBean lb) throws IOException {
     // what to do here?
}
}

我用过 <input type="hidden" value=${innerData} name="innerData"> 但它没有发送更新的数据

2 个答案:

答案 0 :(得分:0)

根据您的问题,您似乎正在尝试构建类似Excel的功能。可以修改多个单元格,并且需要将修改提交回服务器。

发布表单时,您可以使用javascript迭代所有单元格并构建一个json对象。例如,关注sudo代码

var cells = new Object();
for every cell
   celss[cell id] = <text content of the cell>
end for

var cellText = JSON.stringify(cells)
set the value of hidden field

在服务器端,您的方法需要使用@RequestParam注释具有预期的输入字段。您可以使用gson或此类工具来解析数据。如果你遵循良好的id惯例,例如id可以是&#34; id __&#34;,你可以解析它以找出内容的去向。

答案 1 :(得分:0)

表单应该与modelAttribute一起提及,它在保存后将表单的值存储到该对象中。

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<form:form method="POST" id="form" name="form" class="form"
		action="${pageContext.request.contextPath}/home/page2/submit"
		modelAttribute="data">  
    <table border="5" id="dataTable">
            <tbody>
                <c:forEach var="data" items="${Hello.userlist}" varStatus="loop">
                    <tr>
                        <c:forEach var="innerData" items="${data}">
                            <td id="innerData" contenteditable="true" path="name">
                            <c:out value="${innerData}"></c:out></td>
                         
                        </c:forEach>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
       <input type="hidden" value="${sizeOfData}" name="sizeOfData" path="name">
        <input type="submit" value="save">
  
</form:form>

应该在项目的模型包中创建一个类,如下所示

public class Data {
String name;
public void setName(String name) {
    this.name = name;
}
public String getName() {
    return name;
}}

Controller将具有以下方法,@ RequestMapping(value =“/ method2 / submit”,method = RequestMethod.GET)     public String method3(ModelMap模型,HttpSession会话,HttpServletRequest请求){

    model.addAttribute("data",new Data());
    return VIEWS_LOCATION +"/secondPage";
}
@RequestMapping(value="/method2/submit",method = RequestMethod.POST)
public String method3(ModelMap model, @ModelAttribute("data") Data data) {
    model.addAttribute("name",data.getName());

    return VIEWS_LOCATION +"/secondPage";
}

所有以path =“name”为后缀的元素将由数据模型自动读取并存储在字符串名称中。