我有一个表在JSP中生成while循环中的行,如下所示(我在每行中使用一个隐藏字段来获取特定ID并将其POST到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>
在servlet中,
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) {
}
}
但这会删除表的第一行,而不是我需要删除的行。请告诉我我在哪里犯了错误或建议我。
答案 0 :(得分: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>
答案 1 :(得分: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>
希望这会有所帮助..
答案 2 :(得分: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
}
相关链接
答案 3 :(得分: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")
会返回第一个 value of this list。因此,总是会删除第一行。
一种可能的解决方案是删除隐藏的输入字段,并为每行中的提交按钮提供不同的值:
<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");
这将为您提供正确的身份证。
答案 4 :(得分:0)
使用此代码以表格形式显示List:
<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.
它对我有用。