userdetails.jsp
<tr>
<td>
<%
out.println(rs.getString(1));
name=rs.getString(1);
out.print("<input type='hidden' name='user' value='"+name+"'");
%>
</td>
<td>
<%out.println(rs.getString(2));
%>
</td>
<td>
<%out.println(rs.getString(3));
%>
</td>
<td>
<%out.println(rs.getString(4));
%>
</td>
<td>
<input type="Submit" name="delete_user" value="Delete"/>
</td>
</tr>
当我点击删除按钮时,只有第一行被删除而不是与点击哪个按钮对应的行
答案 0 :(得分:3)
您在相同的表单中放置了多个隐藏的输入值并完全删除了按钮。当您使用request.getParameter()
获取隐藏的输入值时,无论按下删除按钮,您都会获得第一个输入值。
您需要以自己的形式分组隐藏的输入和删除按钮。
<td>
<form action="delete" method="post">
<input type="submit" name="delete_user" value="Delete" />
<input type="hidden" name="user" value="<%=rs.getString(1)%>" />
</form>
</td>
这样,请求将始终具有一个和正确的用户名作为参数。
说在JSP中使用 scriptlets 是90年代编写JSP的方式,而且在JSP中混合数据库逻辑并不是一个好习惯。我建议你自己完成this answer。
答案 1 :(得分:0)
您可以在点击按钮值时将用户名添加到按钮值:
<input type="Submit" name="delete_user" value="Delete" onclick="this.value += ' <% out.print(name); %>'; this.disabled = true; " />
然后在服务器端代码中,解析值:获取第一个空格后的文本,这是要删除的用户名,仅引用具有该用户名的行。