数据库中的三个动态下拉列表,单个表单,具有表单操作

时间:2017-02-11 09:38:58

标签: forms jsp servlets

当我在动态下拉列表中使用onchange="this.form.submit()"方法时,依赖于另一个 整个表格是提交做什么给我一些建议

当我删除表单操作时,它只能下拉但是如何从表单中获取数据到数据库

register.jsp

    <%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Register to House in Rent India</title>
<link rel="stylesheet" type="text/css" href="styleraika.css">
</head>
<body>
<div class="ctn">
<form action="register" method="post" id="rg" name="rg">
<div class="register_label">State</div>

<select class="register_text" name="stat" id="stat" onchange="this.form.submit()">
<option value="">Select State</option>
<%
try
{
    String sql="select * from state";
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/raika","root","mysql");
    Statement stmt=con.createStatement();
    ResultSet rs=stmt.executeQuery(sql);

while(rs.next())
{
%>

<option value="<%=rs.getInt("sid")%>"
<%
if(request.getParameter("stat")!=null)
{
    if(rs.getInt("sid") == Integer.parseInt(request.getParameter("stat")))
    {
        out.print("selected");
    }
}

%>
><%=rs.getString("state")%></option>
<%
    }
}


catch(SQLException e)
{
    e.printStackTrace();
}

%>

</select>



<div class="register_label">District</div>
<select class="register_text" name="dist" id="dist">
<option value="">Select District</option>
<%
String n=request.getParameter("stat");
try
{
    String sql="select * from dist where sid=?";
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/raika","root","mysql");

    PreparedStatement ps=con.prepareStatement(sql);
    ps.setString(1, n);

    ResultSet rs=ps.executeQuery();
    while(rs.next())
    {
%>
    <option value="<%=rs.getString(1)%>"><%=rs.getString(2)%></option>
<%
    }
}
catch(SQLException e)
{
    e.printStackTrace();
}

%>

</select>

<div class="register_label">Local Area</div>
<input type="text" class="register_text" name="local" id="local">

<center>

<input type="submit" value="Register" class="reg_btm">
<input type="button" value="Reset" class="reg_btm" onclick="reset()">

</center>
</form>
</div>

<script>
function reset() {
    document.getElementById("rg").reset();
}
</script>

</body>
</html>

Servlet代码

package demo;

import java.io.IOException;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

/**
 * Servlet implementation class Register
 */
@WebServlet("/register")
public class Register extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Register() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String local=request.getParameter("local");
        int s=Integer.parseInt(request.getParameter("stat"));
        String dist=request.getParameter("dist");
        String state1=request.getParameter("stat");


        try{

            Class.forName("com.mysql.jdbc.Driver");
            Connection con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","mysql");
            String sql="INSERT INTO location (state,dist,local) VALUES (?,?,?);";

            PreparedStatement ps=(PreparedStatement) con.prepareStatement(sql);

            ps.setString(1, state1);
            ps.setString(2, dist);
            ps.setString(3, local);
            ps.executeUpdate();

            ps.close();

            String sql2="INSERT INTO local (did, local) VALUES (?,?);";
            PreparedStatement ps2=(PreparedStatement) con.prepareStatement(sql2);
            ps2.setInt(1, s);
            ps2.setString(2, local);
            ps2.executeUpdate();
            //pw.println("Data Inserted successfully..........");
            response.sendRedirect("success.jsp");

        }
        catch(ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }
    }

    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
    processRequest(request, response);  
    }      

    protected void doPost1(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
    processRequest(request, response);  
    }  

    private void processRequest(HttpServletRequest request, HttpServletResponse response) {
        // TODO Auto-generated method stub          
    }

    @Override  
    public String getServletInfo() {  
    return "Short description";  
    } 
}

1 个答案:

答案 0 :(得分:0)

你应该这样做:

<form action="register" method="post">
    <select class="register_text" name="stat" id="stat">

          /** skipping your java code **/

         <option value="Desired_Value_Here"> </option>

    </select>

    <select class="register_text" name="dist" id="dist">

          <option value="Desired_Value_Here"> </option>

    </select>

    <input type="submit" value="" class="" />
</form>

您不需要 onChange 事件,当您按下提交按钮时,此表单将被提交并将命中您的servlet。您将在servlet中执行的操作是:

String yourStat = request.getParameter("stat");
//for getting selected value from the first select tag
String yourDist = request.getParameter("dist");
//for getting selected value from the second select tag

这就是你需要做的一切。

我建议您将JavaScript放在外部(单独的.js文件)中,并使用表达式语言,以便您的代码可读。