如何将表的单选按钮值从一个jsp传递到另一个jsp

时间:2014-03-03 20:57:35

标签: java jsp

我有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");



%>

1 个答案:

答案 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中的会话中读取。