我有2个JSP页面 i.adminhome.jsp ii.deletecontroller.jsp
adminhome.jsp显示客户端表
我希望管理员根据需要从客户端表中删除特定行。 所以我需要使用radiobutton从客户端表中选择clientid,然后按“删除”按钮删除所选行
但是我没有得到所需的输出,因为我没有将选定的clientid值作为会话变量传递给deletecontroller页面。因此我得到零值。
这些是2页的代码
1.adminhome.jsp
<%
try
{
Connection conn=null;
Statement stmt=null;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:xyz","sa","pass");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("Select UserID,Username,Location,Gender,EmailID from Client");
while(rs.next()){%>
<table border="1" align="center" >
<tr>
<td><input name="district" type="radio" value="<%=rs.getString("UserID") %>" required="true"/></td>
<td><%=rs.getString("Username") %></td>
<td><%=rs.getString("Location") %></td>
<td><%=rs.getString("Gender") %></td>
<td><%=rs.getString("EmailID") %></td>
<%
String x = request.getParameter("district");
session.setAttribute("userid", x);
%>
<td><input type="submit" name="btn1" value="Delete"></td>
</tr>
</table>
</div>
<br/><br/>
<%}
}
catch(Exception e){e.printStackTrace();}
%></form>
2.deletecontroller.jsp
<%@ page import="java.util.*" %>
<%@ page language="java" import="java.sql.*" errorPage="" %>
<%
String x=session.getAttribute( "userid" ).toString();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:xyz;","sa","pass");
Statement stmt=null;
stmt = con.createStatement();
String del="Delete from Client where UserID='"+x+"' ";
stmt.executeUpdate(del);
response.sendRedirect("index.jsp");
%>
答案 0 :(得分:0)
让我们来看看你的代码所做的事情
<td><input name="district" type="radio" value="<%=rs.getString("UserID") %>" required="true"/></td>
...
<%
String x = request.getParameter("district");
session.setAttribute("userid", x);
%>
您正在输出一个名为district的字段的HTML表单。同时,您正在从请求中读取区域并将其保存到会话中。由于分区不在请求中,因此您正在读取NULL,并在会话中保存NULL。当您刚刚输出表单时,请求中的内容如何?在您将表单输出给用户之前,用户无法提交表单,是吗?
然后,当您提交表单时,在您的servlet中,您正在阅读会话:
String x=session.getAttribute( "userid" ).toString();
在构建表单时,您正在读取保存到会话中的NULL。您没有阅读用户实际提交的表单。
你应该怎么做?从servlet中的请求中读取:
String x = request.getParameter("district");
当用户提交表单时,会生成带参数分区的请求,因此请求将被发送到servlet,您应该从那里读取请求。
或者,另一种方法是从rs.getString("UserID")
:
<%
session.setAttribute("userid", rs.getString("UserID"));
%>
这可能是你想要的,因为UserID可能是会话范围而不是请求,因为你不希望用户在表单中更改用户ID并操纵事物。然后,您仍然可以从servlet中的会话中读取。