Java 从jsp页面向servlet传递html表

Java 从jsp页面向servlet传递html表,java,mysql,jsp,servlets,Java,Mysql,Jsp,Servlets,我在jsp页面中有html表,动态地从数据库加载数据,然后通过servlet将表中的所有数据保存到数据库中。 现在我的问题是,我有一个jsp页面,它显示一个来自servlet的数据表,其中包含复选框,我必须将选中的内容发送到servlet以更新到数据库,如何做到这一点 提前谢谢,这是我的桌子 <form action="showKwh" method="POST"> <input type="submit" value="show"/> <tab

我在jsp页面中有html表,动态地从数据库加载数据,然后通过servlet将表中的所有数据保存到数据库中。 现在我的问题是,我有一个jsp页面,它显示一个来自servlet的数据表,其中包含复选框,我必须将选中的内容发送到servlet以更新到数据库,如何做到这一点

提前谢谢,这是我的桌子

<form action="showKwh" method="POST">

    <input type="submit" value="show"/>

    <table id="adminTable" class="detailsTable">

        <tr class="header">
            <th colspan="4">Kilowat Entry</th>
        </tr>

        <tr class="tableHeading">
            <td></td>
            <td>customer id</td>
            <td>name</td>

            <td>group</td>
            <td>kwh</td>



            <td>kwd</td>

        </tr>

        <c:forEach  var="cust" items="${customerKwh}" varStatus="iter">
            <tr id="${cust.id}" class="${((iter.index % 2) == 1) ? 'lightBlue' : 'white'} tableRow">
                <td><input type="checkbox" name="check1" class="checker" value="ON" /></td>
                <td id="id?${customer.id}">${cust.id}</td>
                <td >${cust.name}</td>
                <td >${cust.type}</td>

                <td >${cust.kwh}</td>



                <td><input type="text" name="txt" size="8" id="kwd${cust.id}" value="${param.value}" class="name1"  /></td>

            </tr>
        </c:forEach>
    </table>
</form>

千瓦特入口
客户id
名称
组
千瓦时
科威特第纳尔
${cust.id}
${cust.name}
${cust.type}
${cust.kwh}
因为您的输入字段(复选框)在for循环中,所以所有复选框都将具有相同的name属性。因此,您可以使用
HttpServletRequest
中提供的以下方法获取具有相同名称的输入字段的值

String[] getParameterValues(String name)
在您的情况下,可以使用以下语句获取所有值-

request.getParameterValues("check1");

您可以将提交时需要发布的所有数据放回表单字段并由浏览器发送,或者使用一些类似于jQuery的javascript来操作html表的DOM,在客户端提取数据,并通过ajax请求以JSON或XML的形式发送到服务器端进行解析

不过,这是一个非常奇怪的要求。由于表中的数据来自处理响应的同一台服务器,因此使用一组行标识符进行响应就足够了,服务器将通过这些标识符识别完整的行数据

您可以通过复选框的值传递这些标识符:
。然后,按照HTML标准,响应中只包括具有
选中的
选中的
使用jQuery提取表单数据。首先,将标记包含数据的数据类添加到您的
,以便我们可以使用jQuery选择它:

<td class="customerName">${cust.name}</td>
<td class="customerType">${cust.type}</td>
...and so on.
${cust.name}
${cust.type}
等等
将jQuery包含到JSP中,并在结束标记之前添加元素
。然后在包含脚本的页面上添加另一个脚本元素。以下是一个例子:

<html>
<head>

</head>
<body>

<form action="showKwh" method="POST">

    <input type="submit" value="show"/>

    <table id="adminTable" class="detailsTable">

        <tr class="header">
            <th colspan="4">Kilowat Entry</th>
        </tr>

        <tr class="tableHeading">
            <td></td>
            <td>customer id</td>
            <td>name</td>

            <td>group</td>
            <td>kwh</td>


            <td>kwd</td>

        </tr>

        <tr id="123" class="lightBlue tableRow">
            <td><input type="checkbox" name="check1" class="checker" value="123"/></td>
            <td id="id?123" class="customerId">123</td>
            <td class="customerName">Ivan</td>
            <td class="customerType">Person</td>

            <td class="customerKWH">54321</td>


            <td><input type="text" name="txt" size="8" id="kwd123" value="98765" class="name1"/></td>

        </tr>
    </table>
</form>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () { //launch this code after the whole DOM is loaded
        $("form").submit(function (event) { // function to process submitted table
                    var tableData = []; // we will store rows' data into this array
                    $("#adminTable") // select table by id
                            .find(".tableRow") // select rows by class
                            .has(":checked") // select only rows with checked checkboxes
                            .each(function () { // for each selected row extract data               
                                var tableRow = {};
                                var jRow = $(this);
                                tableRow.customerId = jRow.find('td.customerId').text();
                                tableRow.customerType = jRow.find('td.customerType').text();
                                tableRow.customerKWH = jRow.find('td.customerKWH').text();
                                tableRow.costomerKWD = jRow.find('input.name1').val();
                                tableData.push(tableRow);
                            });

                    $.post(
                            "http://google.com", /*url of consuming servlet*/
                            {tableData: tableData}, /*data*/
                            function () {
                                alert("Success!");
                            }, /*function to execute in case of success*/
                            "json" /* data type */
                    );
                    event.preventDefault(); //Prevent sending form by browser
                }
        );


    });
</script>
</body>
</html>

千瓦特入口
客户id
名称
组
千瓦时
科威特第纳尔
123
伊凡
人
54321
$(document).ready(函数(){//在加载整个DOM后启动此代码
$(“表单”).submit(函数(事件){//函数处理提交的表
var tableData=[];//我们将把行的数据存储到此数组中
$(“#adminTable”)//按id选择表格
.find(“.tableRow”)//按类选择行
.has(“:checked”)//仅选择带有复选框的行
.each(函数(){//对于每个选定的行提取数据
var tableRow={};
var jRow=$(此);
tableRow.customerId=jRow.find('td.customerId').text();
tableRow.customerType=jRow.find('td.customerType').text();
tableRow.customerKWH=jRow.find('td.customerKWH').text();
tableRow.costomerKWD=jRow.find('input.name1').val();
tableData.push(tableRow);
});
美元邮政(
"http://google.com“,/*消费servlet的url*/
{tableData:tableData},/*数据*/
函数(){
警惕(“成功!”);
},/*成功时执行的函数*/
“json”/*数据类型*/
);
event.preventDefault();//防止通过浏览器发送表单
}
);
});

<强>在浏览器中处理表单提交的表值,<强>您可以考虑以下方法。 HttpServletRequest继承自ServletRequest方法getParameterMap(),该方法返回映射。( ). 您可以使用一些参数名约定来解析它。例如:

Map<String, String[]> tableData = getParameterMap();
String[] idsToUpdate = tableData.get("selectedIds");
for (String id : idsToUpdate){
    String kwdParamName = "kwd"+id;
    String kwd = tableData.get(kwdParamName)[0];
}
Map tableData=getParameterMap();
字符串[]idstUpdate=tableData.get(“selectedIds”);
用于(字符串id:idstUpdate){
字符串kwdParamName=“kwd”+id;
字符串kwd=tableData.get(kwdParamName)[0];
}

无论如何,您应该以某种方式解析请求数据。两者(基于JSON和基于表单)都有各自的优点和缺点。您应该选择哪一个可以产生更干净、更健壮的解决方案。也许,在美学上,你会更快乐。最后,但并非最不重要的是,您的客户机上下文是什么:是否启用了javascript,是单页应用程序还是往返。在单页中,更常见的方式是通过JSON来回传递数据。在往返中-可能基于表单更为实用。

what is action=“showKwh”我假定它映射到servlet。因此,您需要创建一个单独的servlet类,并在其中使用jdbc代码将数据分散到数据库中。您可以在jsp中设置table属性,并在servlet中获取。您还需要在web.xml中提供“/showKwh”的映射。签出此链接中的代码感谢您的回答,但我毫不怀疑如何使用servlet,我的URl“showKwh”正在工作,但我需要一种方法来读取或发送整个html表数据到ServletThank Sudhir Dhumal,是否有一种方法可以读取servlet中html表的所有数据,或者有一种方法可以获取整个html数据