2

我有一个表,它在 JSP 中的 while 循环中生成它的行,如下所示,(我在每一行中使用一个隐藏字段来获取特定的 ID 并将其发布到 servlet)

<tr>
    <td><center><%  out.print(rs1.getString("teamid"));%></center><input name="tid" type="hidden" value="<%out.print(rs1.getString("teamid"));%>"/></td>
    <td><center><%  out.print(rs1.getString("teamname"));%></center></td>
    <td><center><%  out.print(rs1.getString("teaminitials"));%></center></td>
    <td><center><%  out.print(rs1.getString("teamdesc"));%></center></td>  
    <td><center><input type="submit" class="greenbutton" name="delete" value="Delete"/></center></td>
</tr>

在小服务程序中,

String buttondelete = request.getParameter("delete");
    if(buttondelete!=null){
    String tid = request.getParameter("tid");

        try {
            clmmodel_database.updateQuery("delete from clm_team where teamid = '"+tid+"'");
            response.sendRedirect("clmview_teamlist.jsp");
        } catch (Exception e) {
        }

    }

但这总是删除表的第一行,而不是我需要删除的行。请告诉我我在哪里犯了错误或建议我一个方法。

4

5 回答 5

1

最简单的解决方案似乎是为每个元素创建一个表单:

<tr>
<td>
Item X
</td>
<td>
<form><input type="hidden" name="id" value="x"/><input type="submit"/></form>
</td>
</tr>

<tr>
<td>
Item Y
</td>
<td>
<form><input type="hidden" name="id" value="y"/><input type="submit"/></form>
</td>
</tr>
于 2013-10-23T08:03:36.517 回答
0

@Dilukshan Mahendra您可以尝试这样,这对我有用。您需要做的就是输入您的表ID和锚标记类(每行都有行的锚标记,因此使用类)

$("#table_name tr td anchor_class").click(function(e) {
// e.preventDefault();
var row = $(this).closest('tr');
var rowid = row.attr('id');
var url = $(this).attr('href');
var ajaxUrl = url.substring(url.lastIndexOf("/") + 1, url.length);
input_box = confirm("Are you sure you want to delete this Record?");
if (input_box == true) {
    // Output when OK is clicked
    // Here you are sending your servlet URL to ajax.
    $.ajax({
        url : ajaxUrl,
        type : "POST",
        async : false,
        success : function() {
            $('#'+rowid).remove();
            alert('Record Deleted');
        }
    });

    return false;
} else {
    // Output when Cancel is clicked
    // alert("Delete cancelled");
    return false;
}
});

我的 html 表格行看起来像,

<tr>
   <td>
     <input type="text">
   </td>
   <td>
     <textarea ></textarea>
   </td>
   <td>
     <input class="file1" type="file" value="">
   </td>
   <td>
      <a id="deleteFile2" class="del" href="ur_servlet_url&id=2">Delete</a>
   </td>
</tr>

希望这可以帮助..

于 2013-10-23T07:36:47.707 回答
0

问题是

1)delete表单上的按钮名称对所有行都是通用的。

String buttondelete = request.getParameter("delete"); //button name on form  

你怎么知道点击了哪个删除按钮?没有标识符。

解决方案
我没有提供完整的代码,而是给你方向。

没有必要hidden field

您可以使用AJAX并编写一个获取 id 并传递给 servlet 的 javascript 函数

<input type="button" class="greenbutton" name="delete" value="Delete" id="<%rs1.getString("teamid");%>" onclick="deleteRow(this.id)"/>  

Javascript

function deleteRow(clickedId)
{
   //AJAX call here
  //pass this clickedId to Servlet and delete the row , show response back to user 
}

相关链接

于 2013-10-23T07:37:06.980 回答
0

在您呈现的 HTML 表格中,您将拥有多个具有相同 id 属性的隐藏字段:

<form>
    <table>
        <tr>
            <td> <input type="hidden" value="ID_1" id="tid" ... > </td>
            <td> ... </td>
        <tr>
        <tr>
            <td> <input type="hidden" value="ID_2" id="tid" ... > </td>
            <td> ... </td>
        <tr>
        ...
    </table>
</form>

这是有效的。发送表单时,所有字段的值tid都会以数组的形式发送到服务器。喜欢:tid = [ "ID_1", "ID_2", ... ]

request.getParameter("tid")将返回此列表的第一个 。因此,始终会删除第一行。

一种可能的解决方案是删除隐藏的输入字段并为每行中的提交按钮赋予不同的值:

<td> <input type="submit" name="delete" value="<%out.print(rs1.getString("teamid"));%>"/> </td>

然后,浏览器会看到:

<form>
    <table>
        <tr>
            <td> ... </td>
            <td> <input type="submit" name="delete" value="ID_1"/> </td>
        <tr>
        <tr>
            <td> ... </td>
            <td> <input type="submit" name="delete" value="ID_2"/> </td>
        <tr>
        ...
    </table>
</form>

并且,在您的 servlet 中,使用:

String tid = request.getParameter("delete");

这将为您提供正确的 ID。

于 2013-10-23T07:45:17.653 回答
0

使用此代码以表格形式显示列表:

<tr>
    <td>
        <input type="submit" name="data" value=<%=rs.getString(5)%> />
    </td>
</tr>

这里的“rs.getString(5)”是 id。id 是字段名/5 是表中的列索引。

在 SERVLET/JSP 页面中

String id = request.getParameter("data"); //Store clicked 'submit' value.

Out.println(id);//Use the variable for your SQL.

它对我有用。

于 2017-01-23T12:58:39.587 回答